首页 > 解决方案 > .NET Framework 更新使构建带有“遇到...之间的冲突”警告

问题描述

我最近将一个 ASP.NET MVC 5 项目从 .NET Framework 4.5.1 更新到 4.6.1。我还更新了 NuGet 包。

现在,当我构建项目时,我看到了几十个警告,Encountered conflict between ...我已经从 VS 输出窗口中包含了其中的几个条目:

1>_HandlePackageFileConflicts: 
1>  Encountered conflict between 'Reference:Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' and 'Reference:Microsoft.Win32.Primitives'.  Choosing 'Reference:Microsoft.Win32.Primitives' because AssemblyVersion '4.0.3.0' is greater than '4.0.2.0'. 
1>  Encountered conflict between 'Reference:System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' and 'Reference:System.AppContext'.  Choosing 'Reference:System.AppContext' because AssemblyVersion '4.1.2.0' is greater than '4.0.0.0'. 
1>  Encountered conflict between 'Reference:System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' and 'Reference:System.Console'.  Choosing 'Reference:System.Console' because AssemblyVersion '4.0.2.0' is greater than '4.0.1.1'. 
1>  Encountered conflict between 'Reference:System.Diagnostics.TraceSource, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' and 'Reference:System.Diagnostics.TraceSource'.  Choosing 'Reference:System.Diagnostics.TraceSource' because AssemblyVersion '4.0.2.0' is greater than '4.0.1.0'. 
1>  Encountered conflict between 'Reference:System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' and 'Reference:System.Globalization.Calendars'.  Choosing 'Reference:System.Globalization.Calendars' because AssemblyVersion '4.0.3.0' is greater than '4.0.2.0'.

packages.config文件包含看起来正确的版本参考:

<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net461" />
<package id="Microsoft.Win32.Registry" version="4.5.0" targetFramework="net461" />

并且 packages/ 文件夹也包含正确的版本。4.3.0 和 4.5.0 用于上述 2 个条目。

我该如何解决这些冲突?

* *

更新

有一个对 Microsoft.Win32.Primitives 的引用,路径为

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\Microsoft.Win32.Primitives.dll

安装 NuGet 包时配置引用。我不明白为什么 NuGet 正在安装 v4.3.0 并将项目中的引用添加到 v4.0.2.0 的扩展中,但由于它较新,因此使用 v4.3.0 解决了冲突。

这是令人困惑的行为。它在我的本地 PC 上运行良好,但在发布后我在其中一台登台服务器上遇到了一个微妙的问题。我怀疑有一个或多个包在暂存服务器上无法正确解决此冲突。

我试图弄清楚如何消除这些依赖项的 eenie-meenie-minie-moe 选择。:S

标签: .netvisual-studionuget

解决方案


.NET Framework 更新使构建留下“遇到……之间的冲突”警告

那是因为:

这是由于对 NETStandard 2.0 的注入支持。我们将新程序集注入 NET 4.6.1 及更高版本的桌面项目,以增加对 netstandard2.0 的支持。我们现在在目标而不是包中执行此操作,因为它不再需要引用包来构建网络标准库。每当我们看到引用了 netstandard1.5 或更高版本的库时,就会发生这种注入(参见 dotnet/sdk#1386)。

检查此线程以获取更多详细信息。

要解决此问题,您可以将绑定重定向添加到这些引用,或者仅使用标准引用Microsoft.Win32.Primitives而不为Microsoft.Win32.Primitives.

有关详细信息,请参阅从 MSBuild 工具复制/加载的 System.Net.Http v4.2.0.0

希望这可以帮助。


推荐阅读