我有一个超过40个项目的解决方案。 在大多数这些项目中,我使用的是通过NuGet安装的System.Net.Http。在撰写本文时,我们已经从Nuget安装了v4.3.3。这也是写入packages.config
中的内容<package id="System.Net.Http" version="4.3.3" targetFramework="net47" />
当我查看app.config时,我在这里使用了不同的版本。在我的一些配置中,版本列出为4.1.1.2,在其他配置中则列出为4.2.0.0。我猜这些是内部版本,但是我发现在两个不同的项目上安装相同的NuGet会给我两个不同的内部版本。
一个app.config:
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />
</dependentAssembly>
另一个app.config:
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
我尝试在Nuget中进行降级然后再次升级,以便同时更新packages.config和app.config。并更新文件。 但是在某些app.config中,我得到的版本比其他版本中的要多。与exat相同的NuGet版本,同时安装。
有什么作用?
我在这里已经阅读了很多关于SO的主题,但是没有一个主题有相同的问题。在大多数情况下,人们通过升级到最新版本来解决问题,但这在这里无济于事。
我猜想我可能还有其他引用将System.Net.Http的版本强制为该项目的旧版本,但是有什么方法可以证实这一论点?另外,如果确实如此,那么是否可以强制所有项目运行最高的通用版本而不是不同的版本?
答案 0 :(得分:0)
在同一从属程序集的不同版本之间发现冲突-app.config与packages.config不同
Visual Studio 2017似乎附带带有内部程序版本4.2.0的.NET 4.6.x-4.7.x System.Net.Http.dll
,而NetFX的最新Nuget程序集程序版本是4.1.2。
此程序包的作者Microsoft需要发布一个更新的nuget程序包,其版本为4.2.0.0。
当前的解决方法可能是将bindingRedirect 4.1.1.2
更改为4.2.0.0
:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
在这种情况下,所有dll都是从构建扩展目录中使用的,而不是Nuget中的一个。
希望这会有所帮助。