我正在Visual Studio中创建一个F#项目,我对项目中的每个.fs文件都收到以下警告:
warning FS0082: Found conflicts between different versions of the same dependent assembly. In Visual Studio, double-click this warning (or select it and press Enter) to fix the conflicts; otherwise, add the following binding redirects to the "runtime" node in the application configuration file: <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="FSharp.Core" culture="neutral" publicKeyToken="b03f5f7f11d50a3a" /><bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" /></dependentAssembly></assemblyBinding> (Code=MSB3247)
warning FS0082: No way to resolve conflict between "FSharp.Core, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "FSharp.Core, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Choosing "FSharp.Core, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" arbitrarily. (Code=MSB3243)
我已经彻底阅读了一些处理同样问题的帖子,但我仍然无法解决问题。在我看到的每一个案例中,该问题都涉及通过NuGet安装的软件包。只需卸载然后重新安装和重新引用软件包即可处理这些情况。但是,由于FSharp.Core是一个无法卸载的内置包,我不知道如何解决这个问题。任何帮助将不胜感激。
编辑(回应马克答案):
我看了一下我的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="2.0.0.0" newVersion="4.3.0.0" />
<bindingRedirect oldVersion="2.3.5.0" newVersion="4.3.0.0" />
<bindingRedirect oldVersion="4.0.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
然后,我修改它看起来完全像下面的答案。不幸的是,我仍然收到与上面发布的相同的错误消息。然后我注意到我的app.config文件中的代码与下面发布的代码之间存在一些轻微的结构差异,因此我将重定向移动到我的原始配置文件中,如下所示(基本上用一个替换三个绑定重定向): / p>
<?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="4.3.0.0"
newVersion="4.3.1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
不幸的是,在运行程序时,我仍然会收到相同的警告消息。我不确定这是否是问题,但链接中的示例似乎处理FileNotFound异常,而我的构建似乎能够找到两个文件,当它真的只需要一个。但是,我真的不太了解F#或Visual Studio,所以差异可能无关紧要。
答案 0 :(得分:3)
假设您已安装F#3.1,请按以下方式redirect FSharp.Core 4.3.0 to FSharp.Core 4.3.1:
将其添加到app.config或web.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="4.3.0.0"
newVersion="4.3.1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
答案 1 :(得分:1)
回应Avery的编辑:
对于涉及不同版本的FSharp.Core的项目,我遇到了类似的问题。关键问题是VS并不总是正确地放置FSharp.Core.dll。最可能发生的是:
解决方案是在构建之前清理项目输出目录。你通过创建一个新项目隐含地做到了这一点,之后你看到一切正常。
我现在通常使用包含FSharp.Core的.props文件创建所有F#项目。该props文件在我的存储库中的所有项目之间共享。如果有语言升级,我只需要更改道具文件,让我的所有项目都使用FSharp.Core的一致版本。