假设我们有一个像这样的fsi脚本:
#r "System.Core.dll"
let script = "Console.WriteLine(\"Hello, World!\")"
// fsi script ???
我们可以使用#load来调用文件上的fsi,但是有可能以某种方式在内存中的字符串上调用fsi而不首先将其写入文件吗?
用例是一个API兼容性测试器:给定一个dll,我想创建一个脚本来调用它的所有公共API,并针对同一个dll的不同版本编译该脚本。
我总是可以将生成的脚本写入磁盘,但如果我可以直接运行它会更清晰。
答案 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()