我已经在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>
这应该可以解决问题。