c# - .Net Core 中 NU1605 警告/错误的可能解决方法
问题描述
发布 .net 核心控制台应用程序 (.Net Core 3.1) 以进行发布时,会发出类似于以下内容的许多错误。
检测到包降级:System.Threading 从 4.3.0 到 4.0.11。直接从项目中引用包以选择不同的版本。
ProjectABC.Services -> log4net 2.0.8 -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.Threading (>= 4.3.0)
ProjectABC.Services -> log4net 2.0.8 -> System.Threading (>= 4.0.11)
我知道在这种情况下 nuget 解析为较小的版本(4.0.11),即使它打破了其他依赖项(> = 4.3.0),因为最近获胜的概念。
是否有任何设置或配置来解决满足所有条件的最新版本?
在这种情况下,版本 4.3.0 是 >= 4.0.11 和 >= 4.3.0
不这样做有什么好处,而是像现在这样用最近的胜利来解决?
大多数解决方案似乎都将新版本的依赖项直接添加到项目中以修复错误。因为它满足最近获胜规则。但是,这似乎维护起来很麻烦,并且如果项目不直接需要不需要的依赖项并且 log4net(在此示例中)曾经被删除或替换,则很容易意外地留下不需要的依赖项。
可能的解决方法
其他一些建议似乎包括更改配置以不将“NU1605”警告视为错误,或将目标运行时设置为可移植(目前我正在为 win-x64 构建)。
从“将警告视为错误”输入中删除“NU1605”警告后,我无法让 VS 保存配置,并且手动更改 .csproj 文件没有效果。
所以我假设有技术原因需要在发布时将这些警告视为错误?
将目标运行时设置为 Portable 似乎确实可以阻止在发布时产生错误。我对此的理解是,在运行时,错误版本的依赖项仍将基于最近获胜使用,警告和错误只会被跳过,尽管完整编译被延迟。因此,如果在 (4.0.11) 和 (4.3.0) 之间将组件添加到所需的依赖项中,那么一切都可能正常工作或中断。我对此的理解准确吗?
我试图回答的主要问题是。
是否有任何替代方法可以直接将较新版本的依赖项添加到项目中,这仍然会导致在编译时解析正确的版本?
将目标运行时更改为可移植的实际修复错误还是将其延迟到运行时?
解决方案
推荐阅读
- list - 无法从 cmake 中的列表中提取项目
- r - 如何将 R 中的 gmnl 函数应用于离散选择实验的潜在类分析?
- python - 如何修复“python中的pool.map问题”
- python - 是否有一个 python 函数用于将两个 3D 图像的体素值相加,存储在列表中,并将输出存储在另一个列表中
- android - 为什么为回收站请求布局会停止布局操作?
- excel - 在 Debug.Print 中返回 5 位日期而不格式化单元格
- python-3.x - 为未分配 EIP 的已停止实例确定实例 IP 或 DNS
- javascript - 将打开一个 div 关闭上一个
- operator-precedence - 编程语言的运算符评估顺序的技术术语是什么?
- python - 仅引用条件为 True Python Pandas 的 DataFrame