强制 NuGet 包平台

Posted

技术标签:

【中文标题】强制 NuGet 包平台【英文标题】:Force NuGet Package platform 【发布时间】:2020-01-19 18:50:13 【问题描述】:

我正在尝试在我的 DotNet Core 2.0 应用程序中使用由内部团队创建的 NuGet 包。

当我编译时,我收到以下警告:

使用“.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, 恢复包“MyInternalPackage 3.0.0.29” .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' 代替项目目标框架'.NETStandard,Version=v2.0'。这个包可能不完全兼容你的项目。

但是当我在 Visual Studio 的 NuGet 包管理器中查看包时,它会显示:

当我查看 NuGet 包中的 lib 文件夹时,它会显示这些文件夹:

net451 netcoreapp2.0

那么,我如何强制它使用 netcoreapp2.0 库而不是完整的 Dot Net 框架库?

【问题讨论】:

您的包依赖于完整的框架和 .net 核心运行时。以 .net 标准 2.0 为目标。 .net 标准的东西只能真正引用其他 .net 标准的东西。 @DanielA.White - 这个包应该是一个“多目标”包,允许在完整框架和 dotnet 核心中使用。 (这就是为什么它对两者都有依赖) 当然,但您没有构建它的 .net 标准版本。这就是缺少的。 @DanielA.White - 啊,所以这是一个 .net 标准!= dotnet 核心问题? 是的。您尝试添加 的库是 .net 标准库,而不是 .net 核心库。 【参考方案1】:

您要添加包的库是 .NET Standard 库。您的 NuGet 包没有 .NET Standard 的目标。你要么必须

    生成 .NET Standard 包(首选)。 将您的类库改为以 .NET Core 为目标。

【讨论】:

为什么首选 .NET Standard? (仍在快速了解以 .NET Standard 为目标的含义。) @Vaccano 它允许您将类库与 .net 框架、uwp、.net core、xamarin 等一起使用 那么,构建 nuget 时是否只需要 .net 标准?这会得到他们所有吗? 将 .net 标准视为接口,将各种 .net 视为具体实现。 知道了!谢谢!

以上是关于强制 NuGet 包平台的主要内容,如果未能解决你的问题,请参考以下文章

使用NuGet将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理

NuGet包管理平台

是否可以根据目标平台更改 Nuget 包引用?

使用NuGet将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理

如何使用跨平台工具创建 NuGet 包(转)

详解.Net 如何上传自己的包到Nuget平台以及如何使用Nuget包管理器