我已经在F#中创建了一个针对F#3.1运行时的项目(即FSharp.Core版本4.3.1)。然后,我创建了一个控制台C#应用程序,添加了对我的F#项目的项目引用,添加了对FSharp.Core.dll 4.3.1的引用。

一切都能编译,没有任何错误或警告,但是当我尝试使用F#项目中的任何类型时,运行时都会抛出此错误:

System.IO.FileLoadException : Could not load file or assembly 'FSharp.Core, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

当我所有的项目都引用4.3.1时,为什么要搜索FSharp.Core 4.3.0?如果我将所有项目引用从4.3.1更改为4.3.0,那么一切都会正常运行,但是4.3.1版本又如何了?

附言这两个项目的目标都是.NET 4.5.1。我正在使用Microsoft Visual Studio 2013

最佳答案

这是一个疯狂的猜测,但是基于异常(exception)情况,您可能会在项目中包含其他FSharp程序集。

因此,该错误表明您正在使用的依赖项之一需要FSharp.Core 4.3.0.0。假设您的项目引用了其他FSharp依赖项,例如FSharp.Data 2.2.0.0。甚至,即使您在自己的项目中为FSharp.Core 4.3.1.0添加了显式引用,也无法使用,因为FSharp.Data 2.2.0.0是针对FSharp.Core 4.3.0.0构建的。要解决此问题,您需要添加绑定(bind)将重定向到项目配置文件app.config中:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这应该可以解决问题。

10-07 16:05
查看更多