1

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

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

我们可以使用#load 在文件上调用 fsi,但是是否可以在不先将其写入文件的情况下以某种方式在内存中的字符串上调用 fsi?

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

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

4

1 回答 1

2

您在问题中概述的那种任务可以使用命名空间中提供的工具执行,特别是在 type ofMicrosoft.FSharp.Compiler.Interactive的帮助下。FsiEvaluationSessionMicrosoft.FSharp.Compiler.Interactive.Shell

这个Ryan Riley编写的要点准确地演示了您的场景,使用了一个瘦包装器类型FSharpEngineover FsiEvaluationSession,使编程使用变得非常fsi方便:

....
let engine = new FSharpEngine()
engine.Execute("<some F# code>") |> processOutput
....
engine.Dispose()
于 2013-11-15T16:09:46.903 回答