NuGet 警告 NU5130
nuspec 和 lib/ref 文件夹的依赖项组中所声明的某些目标框架,具有兼容的匹配项,但在其他位置中并未完全匹配。 除非有意为之,否则请参考以下操作列表:
- 将 .NETFramework4.7.2 的依赖项组添加到 nuspec
问题
包中的 lib/<tfm>/
或 ref/<tfm>/
目录包含警告消息中指定的目标框架名字对象 (TFM) 的至少一个对应文件。 但是,nuspec
文件中不存在针对此 TFM 的依赖项组。 这可能会导致包使用者认为此包与 TFM 不兼容。 如果指定 TFM 的对应程序集的依赖项与依赖项组中所定义兼容 TFM 的依赖项有所不同,则使用此包的项目可能会出现运行时故障。
解决方案
- 对项目运行 NuGet 的 pack target
如果可能,请使用 NuGet 的 MSBuild pack target,因为它会自动将程序集 TFM 与项目的目标框架中的依赖项组进行匹配。 请注意,项目必须将 PackageReference
用于自己的 NuGet 依赖项。 如果项目使用 packages.config,则需使用 nuget.exe pack
和 nuspec
文件。
- 手动编辑
nuspec
文件
如果使用的是自定义 nuspec
文件,则建议 lib/
或 ref/
程序集为其而存在的每个 TFM 均有匹配的依赖项组,即使这些依赖项与下一兼容 TFM 的依赖项相同。 例如,如果包含有 netstandard1.0
和 netstandard2.0
程序集,且两者的依赖项相同,则建议将这两个 TPM 列为具有重复依赖项的依赖项组。
请注意,程序集路径中使用的 TFM 标识符采用与依赖项组中所用 TFM 标识符不同的格式。 警告消息指定了要在依赖项组中使用的正确名称。 如果包不含针对该目标框架的任何依赖项,则请使用空组。 例如:
<package>
<metadata>
...
<dependencies>
<group targetFramework=".NETFramework4.7.2" />
</dependencies>
</metadata>
...
<package>
- 删除
lib/
或ref/
文件
如果不希望包与报告的 TFM 兼容,请修改项目,以免在该 TFM 的对应包中出现 lib/<tfm>/
或 ref/<tfm>/
文件。 例如,如果警告显示将针对 .NETFramework4.7.2
的依赖项组添加到 nuspec
,则从包中删除所有 lib/net472/*
和 ref/net472/*
文件。