嵌入F# Interactive时抛出StopProcessingExn None异常求助
StopProcessingExn None异常 我之前也碰到过类似的问题,结合你的环境(VS2017 Enterprise + .NET Core 2.0 + FSharp.Compiler.Service 17.0.1 + FSharp.Core 4.2.0),可以从这几个方向排查解决:
1. 优先解决版本兼容性问题
FSharp.Compiler.Service(简称FCS)的版本和目标框架、FSharp.Core版本需要严格匹配。17.0.1版本的FCS是为较新的F#和.NET版本设计的,而.NET Core 2.0对应的FSharp.Core最高仅支持到4.6.2左右,FCS 17.x已经不再兼容.NET Core 2.0环境。
建议你把FCS版本降级到10.2.4,这个版本是专门适配.NET Core 2.0的,同时FSharp.Core可以保持4.2.0,或者升级到同框架兼容的最高版本(比如4.6.2)。
2. 检查F# Interactive会话的初始化代码
如果版本调整后仍有问题,要确保你初始化FsiEvaluationSession时配置了正确的参数,比如加载必要的引用、设置正确的工作目录。给你一个可参考的初始化示例:
open FSharp.Compiler.Service // 初始化FCS服务实例 let fcsService = FSharpCompilerService.Create() // 配置会话主机参数 let sessionConfig = FsiEvaluationSessionHostConfig( fsiPrinter = None, fsiErrorPrinter = None, redirectOutput = true, workingDirectory = System.IO.Directory.GetCurrentDirectory() ) // 必须加载的核心引用,包括FSharp.Core和当前项目程序集 let requiredReferences = [ typeof<obj>.Assembly.Location // 基础mscorlib程序集 typeof<FSharp.Core.FSharpFunc<_,_>>.Assembly.Location // FSharp.Core程序集 // 当前项目编译后的输出程序集路径 System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "bin/Debug/netcoreapp2.0/YourProject.dll") ] // 创建F# Interactive评估会话 let evaluationSession = fcsService.CreateEvaluationSession( sessionConfig, references = requiredReferences, otherFlags = [||] )
注意:如果你的项目依赖其他NuGet包,也要把对应程序集的路径加入到requiredReferences列表中。
3. 验证VS2017的环境配置
确保你的VS2017已经安装了最新的更新补丁(至少是15.9.x版本),并且.NET Core 2.0 SDK已正确安装。另外,检查F#工具组件是否完整:可以通过VS安装器修改安装,确保".NET Core跨平台开发"和"F#语言支持"组件都已勾选。
如果以上步骤都尝试后还是有问题,建议创建一个全新的.NET Core 2.0 F#控制台项目,只添加必要的FCS引用和简单的会话初始化代码,排除项目本身的配置干扰。
内容的提问来源于stack exchange,提问作者Wingjam

