在同一从属程序集的不同版本之间发现冲突-app.config与packages.config不同

时间:2018-06-28 12:30:41

标签: .net visual-studio nuget nuget-package

我有一个超过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的版本强制为该项目的旧版本,但是有什么方法可以证实这一论点?另外,如果确实如此,那么是否可以强制所有项目运行最高的通用版本而不是不同的版本?

1 个答案:

答案 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中的一个。

希望这会有所帮助。