.net - .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
解决方案
.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。
希望这可以帮助。
推荐阅读
- java - Java:为什么我们需要转换浮点数而不是双精度数?
- ignite - Apache Ignite 缓存中的 SQL 查询
- arrays - 如何回收随机数组值?
- javascript - `new lru.prototype.lrunode(key, value);` 表达式
- hyperledger-fabric - Hyperledger Fabric v1.2 - 无法调用链代码名称:“qscc”,错误:执行事务时超时已过期
- ios - 在 UITextView 中计算 html 内容高度失败
- javascript - 如何从额外的输入表单将数据保存到 sql
- swift - 图像未在 imageView 中显示
- c# - 如何使用 Identity Server 4 撤销或使令牌无效?
- android - 如何知道在哪里寻找 android 手机上的媒体目录?