【问题标题】:FSharp Interactive won't start; can't find System.Runtime.dllFSharp Interactive 无法启动;找不到 System.Runtime.dll
【发布时间】:2017-06-02 15:04:07
【问题描述】:

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

PS C:\Program Files (x86)\Microsoft SDKs\F#\4.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,我应该安装什么来把它放在那里?

更新:

我尝试了一些事情,结果没有改变:

  • 通过 VS 2017 安装程序删除 F# 4.1,验证 C:\Program Files (x86)\Microsoft SDKs\F#\4.1 不存在,然后重新安装 F# 4.1
  • 卸载我已安装的所有 .NET Core 版本
  • 删除似乎没有安装程序支持的C:\Program Files (x86)\Microsoft SDKs\F#\4.0 目录。 (该目录中的 FSI 在删除之前有效...)

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

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

【问题讨论】:

  • 这太奇怪了。它不应该试图加载它。你能用 ILSpy 打开fsi.exe,看看它是否真的引用了System.Runtime
  • @FyodorSoikin:感谢您的提示;这样做了,但没有参考。我想它一定是从fsi.exe 引用的东西中引用的。
  • 尝试在调试器下运行,看看异常时加载了哪些模块。然后检查它们中的每一个,看看哪个引用了System.Runtime

标签: .net f# fsi


【解决方案1】:

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

我认为 coreclr 版本不知何故被复制到那里。要解决它,我会这样做: * 运行 vs 设置,取消选择 F# 编程工具。

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

删除编译器目录:“C:\Program Files (x86)\Microsoft SDKs\F#\4.1”

重新运行与设置并选择 F# 编程工具。

如果之后仍然重复,请在 https://github.com/Microsoft/visualfsharp 处打开一个问题

谢谢

凯文

【讨论】:

  • 嗯。这可能是一个 PATH 问题,即它在 PATH 中找到 coreclr 编译器并选择它而不是同一目录中的那个?我应该在 PATH 中寻找什么来确认/反驳这一点?
  • 感谢您的建议;不幸的是,没有成功。我会继续提出问题。
【解决方案2】:

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

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

C:\Program Files (x86)\Microsoft Visual Studio\2017\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 安装并重新启动,现在一切正常。

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 2021-12-12
    • 2018-07-18
    • 2019-11-19
    • 2011-06-14
    • 2016-04-26
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多