无法加载文件或程序集“FSharp.Core,Version=4.6.2.0”。

4
我将Visual Studio从VS2017升级到了VS2019。我打开了一个包含C#和F#的解决方案。一个C#单元测试项目引用了一个F# .dll项目。
这个解决方案编译没有问题,但在运行时,我得到了以下消息:
System.IO.FileLoadException: '无法加载文件或程序集“FSharp.Core,Version=4.6.2.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其某个依赖项。所定位的程序集清单定义与程序集引用不匹配。(HRESULT 的异常:0x80131040)'
内部异常是:
Could not load file or assembly 'FSharp.Core, Version=4.6.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
我在单元测试的app.config中有以下内容:
  <dependentAssembly>
    <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.6.2.0" newVersion="4.6.2.0" />
  </dependentAssembly>

单元测试项目在packages.config文件中有此内容

<package id="FSharp.Core" version="4.6.2" targetFramework="net461" />

我是否没有看到一个缺失的引用?

谢谢。


那么项目文件中有什么?当我得到这个时,我通常会在C#项目中添加对FSharp.Core的引用。如果您在C#项目中没有看到对它的引用,请尝试添加。如果您看到了它,请尝试删除并添加,并确保它在csproj中为4.6.2.0。还要检查您的F#项目是否真正在fsproj中引用了4.6.2.0。也尝试不使用重定向,因为几天前这解决了一个类似的问题 - 不知道为什么。 - Bent Tranberg
3
好的,我看了一下我的单元测试项目——一个采用新项目格式的F#项目。由于某些奇怪的原因,尽管我解决方案中所有的项目都使用 FSharp.Core 4.6.2.0,我仍然在执行一个 bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="4.6.0.0"。我正在使用 NUnit。你能否尝试将重定向改为4.6.0.0,看看是否有所帮助?我怀疑我遇到了同样的内部异常,并最终找到这个奇怪的解决方案。 - Bent Tranberg
1个回答

4

本特·特兰贝格是正确的。

在测试项目中,我将绑定重定向更改为

       <dependentAssembly>
         <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
         <bindingRedirect oldVersion="0.0.0.0-4.6.2.0" newVersion="4.6.0.0" />
       </dependentAssembly>

而且它有效了


也许你最好使用和我一样的“oldVersion”。不确定当我们超过4.6.2.0或者NUnit发生变化时会发生什么。通常我还会在文件中添加注释来解释为什么要做这种奇怪的事情,比如一个指向SO问题的http链接。 - Bent Tranberg
1
我相信这只是针对传统的非 .net-sdk 项目的问题。转换为 .Net Core,您就不需要使用此类解决方法了。 - Charles Roddie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接