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

C# .NET运行时尝试加载FSharp.Core 4.3.0,即使所有项目都引用了4.3.1,c#,.net,f#,C#,.net,F#,我在F#中创建了一个项目,目标是F#3.1运行时(即FSharp.Core版本4.3.1)。然后我创建了一个控制台C#应用程序,向我的F#项目添加了一个项目引用,向FSharp.Core.dll 4.3.1添加了一个引用 一切编译都没有任何错误或警告,但当我试图使用F#project中的任何类型时,运行时会抛出以下命令: 当我的所有项目都引用4.3.1时,为什么它会搜索FSharp.core4.3.0?如果我将所有项目引用从4.3.1更改为4.3.0,那么一切都会正常工作,但是版本4.3.1是怎

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

一切编译都没有任何错误或警告,但当我试图使用F#project中的任何类型时,运行时会抛出以下命令:

当我的所有项目都引用4.3.1时,为什么它会搜索FSharp.core4.3.0?如果我将所有项目引用从4.3.1更改为4.3.0,那么一切都会正常工作,但是版本4.3.1是怎么回事


两个项目的目标都是.NET 4.5.1。我使用的是Microsoft Visual Studio 2013

这是一个猜测,但根据您得到的异常情况,您的项目中可能有其他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>


这应该可以解决问题。

您是否引用了例如FSharp.Data之类的数据?明白了!我正在使用FParsec库解析一些文本,这个库的目标是FSharp.Core 4.3.0。谢谢你的提示:)
<?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>