F# 在内存(非文件)上调用fsi

F# 在内存(非文件)上调用fsi,f#,fsi,F#,Fsi,假设我们有这样一个fsi脚本: #r "System.Core.dll" let script = "Console.WriteLine(\"Hello, World!\")" // fsi script ??? 我们可以使用#load在文件上调用fsi,但是否可以在内存字符串上调用fsi而不首先将其写入文件 这个用例是一个API兼容性测试仪:给定一个dll,我想创建一个脚本来调用它的所有公共API,并根据同一dll的不同版本编译该脚本 我总是可以将生成的脚本写入磁盘,但如果我可以直接运行它,

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

#r "System.Core.dll"
let script = "Console.WriteLine(\"Hello, World!\")"
// fsi script ???
我们可以使用#load在文件上调用fsi,但是否可以在内存字符串上调用fsi而不首先将其写入文件

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


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

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

由演示编写,使用瘦包装类型
fsharpsengine
覆盖
fsieevaluationsession
,使
fsi
的编程使用尽可能方便:

....
let engine = new FSharpEngine()
engine.Execute("<some F# code>") |> processOutput
....
engine.Dispose()
。。。。
让引擎=新的FSharpEngine()
engine.Execute(“”|>processOutput
....
处理引擎

你能把它写在FSI进程的
stdin
上吗?这可能真的有用,只是感觉像一个可怕的黑客:)