即使所有项目都引用4.3.1,.NET运行时也会尝试加载FSharp.Core 4.3.0

我在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是什么?

PS两个项目都针对.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构建的。 要解决此问题,您需要将bindingRedirect添加到项目配置文件app.config

            

这应该可以解决问题。