F# 嵌入从FSharp.Compiler.Service引发异常的交互式示例
我正在处理来自的Embedded F Interactive示例,但遇到以下行引发异常的问题:F# 嵌入从FSharp.Compiler.Service引发异常的交互式示例,f#,f#-interactive,F#,F# Interactive,我正在处理来自的Embedded F Interactive示例,但遇到以下行引发异常的问题: let fsiSession = FsiEvaluationSession.Create(fsiConfig, allArgs, inStream, outStream, errStream) 引发的异常是: FSharp.Compiler.Service.dll中发生类型为“System.exception”的未处理异常 其他信息:创建评估会话时出错:停止处理null 我的项目是从VS2015 E
let fsiSession = FsiEvaluationSession.Create(fsiConfig, allArgs, inStream, outStream, errStream)
引发的异常是:
FSharp.Compiler.Service.dll中发生类型为“System.exception”的未处理异常
其他信息:创建评估会话时出错:停止处理null
我的项目是从VS2015 Enterprise Update 1运行的,设置为一个简单的F控制台应用程序,目标F运行时为F 4.0,目标框架为4.6。从nuget下载的FSharp.Compiler.Service版本为2.0.0.2
我正在运行的Program.Fs文件代码是示例的一个直接端口:
open System
open System.IO
open System.Text
open Microsoft.FSharp.Compiler.SourceCodeServices
open Microsoft.FSharp.Compiler.Interactive.Shell
[<EntryPoint>]
let main argv =
let sbOut = new StringBuilder()
let sbErr = new StringBuilder()
let inStream = new StringReader("")
let outStream = new StringWriter(sbOut)
let errStream = new StringWriter(sbErr)
// Build command line arguments & start FSI session
let argv = [| "C:\\fsi.exe" |]
let allArgs = Array.append argv [|"--noninteractive"|]
let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration()
let fsiSession = FsiEvaluationSession.Create(fsiConfig, allArgs, inStream, outStream, errStream)
/// Evaluate expression & return the result
let evalExpression text =
match fsiSession.EvalExpression(text) with
| Some value -> printfn "%A" value.ReflectionValue
| None -> printfn "Got no result!"
evalExpression "42+1" // prints '43'
Console.ReadLine() |> ignore
0 // return integer
如果您有任何想法,我们将不胜感激。您的问题的关键在于 如果执行动态编译和执行,您可能还需要 包括FSharp.Core.optdata和FSharp.Core.sigdata,有关详细信息,请参阅下文 指导 构建应用程序时,带有FSharp.Core.dll的输出目录缺少两个文件:
FSharp.Core.optdata
FSharp.Core.sigdata
您需要找到这两个文件以及与FSharp.Core.dll一致的文件的正确版本,并将它们复制到生成输出目录
如何使用VisualStudio查找文件
从菜单视图->解决方案资源管理器
扩展项目
扩展引用
右键单击FSharp.Core并选择属性
完整路径给出了至少应该包含这三个文件的目录。
使用文件资源管理器以完整路径打开目录
复制这两个文件
FSharp.Core.optdata
FSharp.Core.sigdata
到生成目录
如何使用Visual Studio查找生成目录
从菜单视图->解决方案资源管理器
选择项目
按F4键打开属性页
使用VS调试时,带有\bin\Debug的项目文件夹是默认文件夹
更改fsi.exe的位置
let argv = [| "C:\\fsi.exe" |]
既然您有了所需的两个文件,您还需要更改fsi.exe的位置
let argv = [| "C:\\fsi.exe" |]
因为我怀疑fsi.exe是否在您的C驱动器的根目录中。很好的解释,但在复制文件后我仍然收到相同的错误。