如何检查.Net和F#核心版本



我已经编写了一个简单的F#控制台小程序。它是靠着它而建的。Net Framework 4.5和F Sharp Core 4.0。它在我的Windows 10工作站上运行良好。在Windows Server 2016(版本1607(上,它抛出

未处理的异常:系统。TypeInitializationException:"<StartupCode$VolLib>VolLib引发了一个异常--->系统IO.FileLoadException:无法加载文件或程序集"FSharp"。Core,Version=4.3.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT异常:0x80131040(

我已经尝试了这篇文章中建议的换人方式。我仍然会犯同样的错误。

我可以在服务器(目标机器(上安装一个工具包。我只是不知道该安装什么。

这通常是一个绑定问题,而不是框架问题。4.3是较旧的版本。

最有可能的是,4.3版本安装在服务器的GAC中。不太可能的是,bin目录包含错误的F#版本,但Win10系统上没有调用有问题的方法。检查FSharp.Core.dll版本的输出目录和GAC,如果它们正确,请检查app.config中的BindingRedirect

如果这无助于找到错误链接的dll的位置和版本,或者,使用typeof<option>.Assembly.GetName().Version作为代码中最早的版本之一转储Core程序集版本(使用Console.WriteLine,而不是printfn(。也可以通过这种方式转储部件位置的实际路径。

发生这种情况的常见原因是,您的代码使用的库本身是针对旧版本的FSharp编译的。Core(例如FParsec,这是该库的常见问题(。我曾经遇到过这样的情况,即部署了错误的程序集或正确的程序集,但如果没有BindingRedirect,它无论如何都会失败。

如果你想知道哪个链接的程序集是罪魁祸首,你必须检查每个程序集的F#版本。像Reflector这样的工具可以提供帮助。如果您想深入研究程序集加载解决方案,可以使用fuslogvw.exe工具实时记录绑定事件。

顺便说一句,你可以用System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription获得你运行的框架的当前版本

最新更新