F# 使用VS 2017时无法解析对程序集FSharp.Core 4.4.1.0的依赖关系

F# 使用VS 2017时无法解析对程序集FSharp.Core 4.4.1.0的依赖关系,f#,visual-studio-2017,f#-4.1,F#,Visual Studio 2017,F# 4.1,我已经在VS 2015和F#4.0(4.4.0.0)中开发了相当长的一段时间 随着VS 2017的发布,我想在最新的VS中为开发工作打开解决方案,但在一段时间内仍将项目保持为VS 2015、F#4.0、.NET 4.5.2。构建服务器还必须使用VS 2015一段时间 据我所知,这种情况在早期的VS版本升级中并没有出现问题,但我认为当时我没有使用F# 我打开解决方案并尝试编译。我在一个C#应用程序项目中遇到了这个错误。(还有其他C#应用程序,至少有一个引用了F#库。) 未知生成错误,“无法解析对程

我已经在VS 2015和F#4.0(4.4.0.0)中开发了相当长的一段时间

随着VS 2017的发布,我想在最新的VS中为开发工作打开解决方案,但在一段时间内仍将项目保持为VS 2015、F#4.0、.NET 4.5.2。构建服务器还必须使用VS 2015一段时间

据我所知,这种情况在早期的VS版本升级中并没有出现问题,但我认为当时我没有使用F#

我打开解决方案并尝试编译。我在一个C#应用程序项目中遇到了这个错误。(还有其他C#应用程序,至少有一个引用了F#库。)

未知生成错误,“无法解析对程序集的依赖关系”FSharp.Core,版本=4.4.1.0,区域性=neutral,PublicKeyToken=b03f5f7f11d50a3a,因为它尚未预加载。使用ReflectionOnly API时,必须通过ReflectionOnlyAssemblyResolve事件预加载或按需加载依赖程序集

解决方案中我的所有F#项目都是4.0(4.4.0.0)。我仔细检查了一下

为什么会发生这种情况?

我搜索了“4.4.1.0”,发现C#project的“obj”文件夹中有一个与app.config不同的.exe.config文件。它有这个项目的app.config中没有的额外信息

<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.4.1.0" newVersion="4.4.1.0" />
      </dependentAssembly>
    </assemblyBinding>

...
为什么这是自动附加的,为什么只在这个特殊的C#项目中

我试图将该部分复制到项目的app.config中,并在两个位置将其更改为4.4.0.0,但都没有成功。还尝试使用“4.4.1.0”作为旧版本的上限,并将“4.4.0.0”作为新版本,但仍然不起作用。同样的编译器错误

然后我删除了该部分,并在C#项目中引用了FSharp.Core 4.4.0.0。这最终消除了编译错误

我运行了这个程序。它因这个例外而崩溃了

未处理的异常:无法加载文件或程序集“FSharp.Core,Version=4.4.1.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100)

我重新插入了带有重定向的部分,现在程序运行正常

总而言之,我添加了对FSharp.Core 4.0的引用,重定向如下所示

<bindingRedirect oldVersion="0.0.0.0-4.4.1.0" newVersion="4.4.0.0" />


经过这些修改,解决方案在VS 2015中仍能正常工作。

检查消息中程序集的程序集引用。对我来说,我有一个对程序集X的引用,它有一个对Y的引用。因为Y丢失了,我得到了这个错误。通过引用Y,我解决了错误。

我也遇到了同样的问题,也许这对某人有帮助:

在我的例子中,原因是我的一些对FSharp.Core具有可传递依赖关系的C#项目直接引用安装在我的系统上的运行时程序集,而不是使用NuGet包。也就是说,引用没有指向NuGet packages文件夹的提示路径,因此从F#SDK的
C:\Program Files\FSharp\…
中选取程序集。我通过删除引用并重新安装FSharp.Core NuGet包解决了这个问题

因此:

<Reference Include="FSharp.Core, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />

变成:

<Reference Include="FSharp.Core, Version=4.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\..\..\packages\FSharp.Core.4.5.2\lib\net45\FSharp.Core.dll</HintPath>
  <Private>True</Private>
</Reference>

..\..\..\packages\FSharp.Core.4.5.2\lib\net45\FSharp.Core.dll
真的

上述问题出现在使用F库的C程序中。今天,我在VS2017中使用F#4.0.0.0的F#程序时遇到了类似的问题。没有编译错误,只有上面的运行时错误。我使用bindingRedirect解决了这个问题,如下所述。我不明白为什么这只发生在我的一些程序中。似乎我无法在调试过程中检查表达式。添加手表会显示错误:错误CS1705:标识为“x”的程序集“x”使用“FSharp.Core,版本=4.4.1.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a”,其版本高于标识为“FSharp.Core,版本=4.4.0.0,区域性=中性”的引用程序集“FSharp.Core”,PublicKeyToken=b03f5f7f11d50a3a'我是如何一次又一次地回到我自己的解决方案的,真有趣。我数不清了。这一次是“应用程序处于中断模式/类型初始化异常未处理”在启动时,甚至在它到达main之前,我花了1.5个小时删除了所有其他可能的源,然后才登录到这里。。。再一次。使用FsXaml时会发生这种情况。这个问题过去了几个月,但又像回飞棒一样卷土重来。呸!注意:如果您使用的是.NET Framework 4.6.*和F#4.1,您的问题可能只是需要在出现此错误的C#项目中添加对FSharp.Core 4.4.1.0(而不是Microsoft.FSharp…)的引用。