首页 > 解决方案 > 如何忽略 NuGet NU1605?

问题描述

我有一个庞大的解决方案,其中包含许多项目和内部 NuGet 包,它们普遍依赖于 Unity 4.0.1。我们正在评估将此解决方案迁移到 Unity 5.11.1 以提高性能并解决由 Unity 项目在 5.0.0 版本中完全删除的代码引起的随机 DI 相关崩溃。

在寻找一种方法来简化从外向内迁移的过程中,已经开发了两个工具:

这两种工具都很好地通过了它们的单元测试,并且转换器设法转换了一个关键的“叶子”项目,但是,当我们试图从一个内部项目引用迁移的叶子项目时遇到了障碍:臭名昭著的NU1605

我绝对可以看到如何保证 NU106 错误,因为内部项目仍然引用 Unity 4.0.1,而叶项目引用 Unity 5.11.1。然而,这是工具妨碍我们的一种情况:我需要两个版本“共存”,因为我正在手动桥接它们的不一致之处。

在纸面上,这应该是可行的,因为 DLL 有不同的版本,甚至命名空间也不同。

有什么方法可以“强制”nuget 接受这种奇怪的设置吗?

标签: c#nugetunity-container

解决方案


您有两种选择来禁止该代码。一种是使用<NoWarn>NU1605</NoWarn>msbuild 属性(必须在 a 中定义PropertyGroup)。Visual Studio 的项目属性可能有一种方法可以在 UI 中对其进行编辑。

另一种选择是将NoWarn="NU1605"元数据添加到您的 ProjectReference 项目中:

  <ProjectReference Include="package id" Version="1.2.3" NoWarn="NU1605" />

最后,NuGet 实际上将 NU1605 报告为警告,如果您仔细阅读文档页面标题,您可能会注意到这一点。WarningsAsErrors.NET Core SDK 使用该属性将其提升为警告。因此,如果您对 MSBuild 足够精通,您可以在他们添加它之后将其删除,或者检查如何防止它被添加到列表中。我对动机的猜测是因为 BCL 作为 .NET Core 1.x 和 2.x 的包分发(不会用于 3.x),并且当有安全更新时,您不希望NuGet 最接近-wins 规则导致具有已知漏洞的包被意外使用。


推荐阅读