在内存上调用fsi(不是文件)

时间:2013-11-15 11:19:05

标签: f# fsi

假设我们有一个像这样的fsi脚本:

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

我们可以使用#load来调用文件上的fsi,但是有可能以某种方式在内存中的字符串上调用fsi而不首先将其写入文件吗?

用例是一个API兼容性测试器:给定一个dll,我想创建一个脚本来调用它的所有公共API,并针对同一个dll的不同版本编译该脚本。

我总是可以将生成的脚本写入磁盘,但如果我可以直接运行它会更清晰。

1 个答案:

答案 0 :(得分:2)

您在问题中列出的类型的任务可以使用Microsoft.FSharp.Compiler.Interactive命名空间中提供的工具执行,特别是在Microsoft.FSharp.Compiler.Interactive.Shell的{​​{3}}类型的帮助下。

FsiEvaluationSession编写的This gist使用FSharpEngine上的精简包装类型FsiEvaluationSession完全覆盖了您的方案,使编程方式使用fsi方便如下:< / p>
....
let engine = new FSharpEngine()
engine.Execute("<some F# code>") |> processOutput
....
engine.Dispose()