FSharp Interactive 无法启动;找不到 System.Runtime.dll

FSharp Interactive won't start; can't find System.Runtime.dll

我已经通过 Visual Studio 2017 安装程序安装了 FSharp 4.1,但 FSI 拒绝启动:

PS C:\Program Files (x86)\Microsoft SDKs\F#.1\Framework\v4.0> .\fsi

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly
'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one
of its dependencies. The system cannot find the file specified.
   at Microsoft.FSharp.Compiler.Interactive.Shell.MainMain(String[] argv)

我假设我在 PATH 变量或其他东西中遗漏了一些东西,但尽管进行了几次重新安装和修复,我还是无法克服这个错误。

FSI 在哪里寻找这个 dll,我应该安装什么才能把它放在那里?

更新:

我已经尝试了一些方法,但结果没有改变:

我已将融合日志转储到一个 zip 文件中并放入 on my Google Drive。有一大堆失败的绑定,System.Runtime, Version 4.1.0.0 就是其中之一。

此处提交问题:https://github.com/Microsoft/visualfsharp/issues/3178

因此那里正在执行的二进制文件是编译器的 coreclr 版本。而那个目录下vs安装的编译器版本就是桌面版的编译器。

我假设 coreclr 版本以某种方式被复制到那里。要修复它,我会这样做: * 运行 vs 设置,deselect F# 编程工具。

一旦 VS 安装程序卸载了 F#。

删除编译目录:"C:\Program Files (x86)\Microsoft SDKs\F#.1"

重新运行 vs 安装程序和select F# 编程工具。

如果在那之后它仍然重现,那么在 https://github.com/Microsoft/visualfsharp

打开一个问题

谢谢

凯文

此问题现已解决 over at github,但为了完整起见,这里有一个摘要。

问题是我出于某种原因在 GAC 中注册了 FSharp.Core 4.1.0.0:

C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise>gacutil /l FSharp.Core
Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.0
Copyright (c) Microsoft Corporation.  All rights reserved.

The Global Assembly Cache contains the following assemblies:
  FSharp.Core, Version=2.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  FSharp.Core, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  FSharp.Core, Version=4.4.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL

Number of items = 3

第三个条目不应该在那里。我删除了:

gacutil /uf "FSharp.Core, Version=4.4.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"

之后,FSI 和 dotnet new 开始正常工作。为了让 Visual Studio 正常工作,我还必须修复我的 VS 安装并重新启动,现在一切正常。