.NET5如何构建netcoreapp3.1?
c#
我正在构建一个 Azure Function 项目,所以我不能以 .NET 5 为目标。相反,我的项目是一个netcoreapp3.1. 但是,当我的项目构建时,只要打印了一些信息,我就会看到提到了 dotnet 5。例子:
##[警告]/usr/share/dotnet/sdk/5.0.101/Microsoft.Common.CurrentVersion.targets(2123,5):警告 MSB3245:无法解析此引用。无法找到程序集“System.Text.Json,Version=4.0.1.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”。检查以确保程序集存在于磁盘上。如果您的代码需要此引用,您可能会收到编译错误。
(我在 System.Text.Json 中遇到的问题本身就是一个问题,在这篇文章中,我想了解 .NET 5 如何构建 netcoreapp3.1)。
我的系统上安装了 .NET Core 3.1,紧挨着 .NET 5。为什么构建系统不使用 3.1?我相信 .NET 5 与 3.1 相比有一些重大变化,所以我不确定使用 .NET 5 来构建项目是否可以。
同样的事情发生在 Azure DevOps Pipeline 构建和本地。在本地,在 Rider 中,我在构建时也看到了这一点:
控制台:使用构建工具:/usr/share/dotnet/sdk/5.0.102/MSBuild.dll
这是结果ll /usr/share/dotnet/sdk:
drwxr-xr-x 28 root root 12K sty 13 08:24 3.1.405/
drwxr-xr-x 28 root root 12K sty 13 08:24 5.0.102/
如您所见,我有 3.1 和 5。
回答
你需要分开三件事:
- 用于执行构建步骤的构建 SDK
- 定义核心包中可用 API 功能的目标平台(由构建 SDK 使用)
- 用于实际执行应用程序的运行时平台,预计支持目标平台的 API 功能
本例中构建SDK为5,目标平台为3.1;很好 - 构建 SDK 5 在目标功能方面完全了解 .NET Core 3.1 ,因此它知道要做什么。只要运行时至少是.NET Core 3.1,一切都应该没问题(如果我们假设在未来的某个运行时环境中没有人对核心库进行重大更改)。
构建SDK 是 v5的事实很有趣,但在很大程度上无关紧要 - 他们可以为构建 SDK 提供完全不同的版本号,并且一切仍然有效。这仅仅是有用的,以保持同步,这样你就知道什么是什么。
如果您真的想使用特定的构建SDK 而不是默认的(这在很大程度上意味着:最高):这就是global.json可以为您启用的。