针对一个 .Net Core 2.1项目,为什么Nuget会还原 .Net 4.6.1的包?

14
如果在.Net Core中没有可用的软件包,我们如何在“Install-Package”命令期间强制执行严格的.Net运行时版本检查?Visual Studio为什么会还原.Net 4.6.1版本,仅在后期阶段提供运行时错误!我相信VS团队已经考虑过这个问题,并且一定有一个机制来验证和在Install-Package期间执行严格的运行时版本检查。警告:包'Microsoft.AspNet.Identity.Core 2.2.2'是使用'.NETFramework,Version=v4.6.1'而不是项目目标框架'.NETStandard,Version=v2.0'来还原的。此包可能与您的项目不完全兼容。我只是拿全面的.net框架套餐作为例子。意图是询问如何在Nuget程序包管理器中防止发生这种情况。警告:包<任何完整的.net框架包>是使用'.NETFramework,Version=v4.6.1'而不是项目目标框架'.NETStandard,Version=v2.0'来恢复的。此包可能与您的项目不完全兼容。

我认为主要原因是许多(大多数?)不专门针对.NET Standard的NuGet包仍然兼容。 - Joey
2
你添加了错误的包。那个不是.NET Core的Identity包。正确的一个是Microsoft.AspNetCore.Identity - Panagiotis Kanavos
@Stijn 不是一个好的重复。在这种情况下,OP只是添加了错误的软件包。 - Panagiotis Kanavos
4
这个包没有列出任何依赖项,这意味着它没有.NET Core/Standard版本。由于许多基于.NET Framework的包可以安全地在.NET Core中使用,因此你最多只能要求一个参数来启用这种严格检查。但是,由于大多数情况下这不会被自动化,所以如果有开发者调用此安装,则必须由该开发者自己注意和处理。 - Lasse V. Karlsen
@PanagiotisKanavos,谢谢您编辑! - Abhijeet
1个回答

13
微软在这个 GitHub 问题中解释了这一点。以下是相关部分的引用:
“每当您使用通过兼容性桥接程序的 NuGet 包时,都会收到如下警告:
警告 NU1701: 包 'Huitian.PowerCollections 1.0.0' 已使用 '.NETFramework,Version=v4.6.1' 而不是项目目标框架 '.NETCoreApp,Version=v2.0' 进行还原。此包可能与您的项目不完全兼容。
我们已确保每次构建时您都会收到此警告(而不仅在安装包时),以确保您不会意外忽略它。
这里的想法是,我们无法知道 .NET Framework 二进制文件是否实际可行。例如,它可能依赖于 WinForms。为了确保您不会浪费时间排除无法正常工作的问题,我们让您知道您正在潜在地偏离方向。当然,需要忽略的警告很烦人。因此,我们建议您测试您的应用程序/库,并且如果您确信一切都正常工作,那么可以抑制警告:”
因此,如果包有效,则可以抑制警告。如果不是,您将不得不使用其他包或等待包支持您的目标框架。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接