如何忽略NuGet NU1605?

问题描述 投票:0回答:1

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

在寻找一种简化从外向内迁移的方法时,开发了两种工具:

  • 基于 Roslyn 的源代码转换器
  • 实现 Unity 5 接口的桥接器,但实际上将调用透明地映射到包装的 Unity 4 容器接口

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

我完全可以理解 NU106 错误是如何发生的,因为内部项目仍然引用 Unity 4.0.1,而叶项目引用 Unity 5.11.1。然而,这是工具妨碍我们的一种情况:我要求两个版本“共存”,因为我正在手动弥合它们的不一致之处。

从理论上讲,这应该是非常可行的,因为 DLL 具有不同的版本,甚至命名空间也不同。

有没有办法“强迫”nuget接受这个奇怪的设置?

c# nuget unity-container
1个回答
11
投票

您有两种选择来抑制该代码。一种是使用

<NoWarn>NU1605</NoWarn>
msbuild 属性(必须在
PropertyGroup
内定义)。 Visual Studio 的项目属性可能有一种在 UI 中编辑它的方法。

另一个选项是将

NoWarn="NU1605"
元数据添加到您的 PackageReference 项目中:

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

最后,NuGet 实际上将 NU1605 报告为警告,如果您仔细阅读文档页面标题,您可能会注意到这一点。 .NET Core SDK 使用

WarningsAsErrors
属性将其升级为错误。因此,如果您足够熟悉 MSBuild,您可以在添加后将其删除,或者检查如何防止将其添加到列表中。我对其动机的猜测是因为 BCL 正在作为 .NET Core 1.x 和 2.x 的包分发(3.x 不会),并且当有安全更新时,您不需要 NuGet最近获胜规则导致具有已知漏洞的软件包被意外使用。

© www.soinside.com 2019 - 2024. All rights reserved.