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

时间:2015-04-09 14:16:40

标签: c# .net f#

我在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

1 个答案:

答案 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}}

这应解决问题。