【问题标题】:Found conflicts between different versions of the same dependent assembly - app.config different from packages.config发现同一依赖程序集的不同版本之间存在冲突 - app.config 与 packages.config 不同
【发布时间】:2018-12-07 13:00:21
【问题描述】:

我有一个包含 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 中,我得到的版本比其他版本中的不同。与excat相同的NuGet版本,同时安装。

什么给了?

我在这里阅读了很多关于 SO 的主题,但没有一个完全有同样的问题。大多数时候,人们通过升级到最新版本来解决他们的问题,这在这里没有帮助。

我猜我可能有其他参考资料将 System.Net.Http 的版本强制为该项目的旧版本,但是有什么方法可以确认这个论点吗?另外,如果确实如此,是否可以强制所有项目运行最高通用版本而不是不同版本?

【问题讨论】:

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


    【解决方案1】:

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

    Visual Studio 2017 似乎附带 .NET 4.6.x-4.7.x System.Net.Http.dll,内部程序集版本为 4.2.0,最新的 Nuget Package 程序集版本为 NetFX 的 4.1.2。

    这个包的作者微软需要发布一个更新的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 的那个。

    希望这会有所帮助。

    【讨论】:

    • 谢谢! :) 有什么办法可以强制不使用 VS17 版本,而是使用 NuGet 版本?我猜 NuGet 的版本更新,即使内部版本不同?另外,您是如何发现 VS17 附带另一个版本的?
    • @Squazz,从 .NET Framework 4.7.1 开始,我们将始终更喜欢使用收件箱 System.Net.Http.dll(GAC 版本)而不是任何 OOB(out-of- band) System.Net.Http.dll 不再来自 NuGet 包。请从以下线程查看更多详细信息:github.com/dotnet/corefx/issues/25050github.com/dotnet/corefx/issues/25773
    • 我的解决方案中唯一依赖 System.Net.Http 的是 Google.Apis。 Google.Apis 用于两个不同的项目,均针对 .Net Framework 4.7。但是在一些项目中我们使用收件箱,在其他项目中我们使用 OOB。我找不到任何方法来强制执行 OOB 或 Inbox,似乎 Nuget 只是为我们做出决定,并在不同的项目中做出不同的决定。
    猜你喜欢
    • 2013-05-22
    • 2010-09-06
    • 2010-12-24
    • 2014-06-26
    • 2014-01-25
    • 2014-09-06
    相关资源
    最近更新 更多