我在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是什么?
P.S。这两个项目都以.NET 4.5.1为目标。我正在使用Microsoft Visual Studio 2013
答案 0 :(得分:27)
这是一个疯狂的猜测,但根据您获得的异常情况,您可能在项目中有其他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
构建app.config
而失败了。要解决此问题,您需要将 bindingRedirect 添加到项目配置文件<?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>
中:
{{1}}
这应解决问题。