2013-11-15 1 views
1

Допустим, у нас есть FSI сценарий вроде этого:Invoke FSI на память (не файл)

#r "System.Core.dll" 
let script = "Console.WriteLine(\"Hello, World!\")" 
// fsi script ??? 

Мы можем использовать #load для вызова FSI на файл, но можно ли каким-то образом вызвать FSI на в строке памяти, не записывая это в файл в первую очередь?

Бланк для использования - это тестер совместимости API: с учетом DLL, я хотел бы создать скрипт, который вызывает все его общедоступные API и скомпилирует этот скрипт для другой версии той же DLL.

Я всегда мог писать сгенерированный скрипт на диск, но было бы намного чище, если бы я мог запустить его напрямую.

+0

Не могли бы вы написать в 'stdin' процесса FSI? – Daniel

+0

Это может на самом деле работать, это просто похоже на ужасный хак :) –

ответ

2

Задачи, которые вы изложили в своем вопросе, могут быть выполнены с помощью инструментов, предоставляемых в пространстве имен Microsoft.FSharp.Compiler.Interactive, в частности, с помощью типа FsiEvaluationSession от Microsoft.FSharp.Compiler.Interactive.Shell.

This gist автором Ryan Riley demoes именно ваш сценарий, используя тонкий тип обертки FSharpEngine над FsiEvaluationSession, что делает программное использование fsi в удобном виде:

.... 
let engine = new FSharpEngine() 
engine.Execute("<some F# code>") |> processOutput 
.... 
engine.Dispose() 
+0

Отлично, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^