提问者:小点点

NET5如何构建NetCoreApp3.1?


我正在构建一个Azure函数项目,所以我不能以.NET5为目标。相反,我的项目是一个。然而,当我的项目被构建时,只要有一些信息被打印出来,我就会看到DotNet5被提到。示例:

警告/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 Core3.1,紧挨着。NET 5。为什么构建系统不使用3.1?我相信。NET 5与3.1相比有一些突破性的变化,所以我不确定是否可以使用。NET 5来构建项目。

同样的事情发生在Azure DevOps管道构建和本地。在本地,在Rider中,我在构建时也看到了这一点:

控制台:使用生成工具:/usr/share/dotnet/sdk/5.0.102/msbuild.dll

以下是的结果:

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。


共2个答案

匿名用户

你需要把三件事分开:

  • 定义核心包中可用的API功能的目标平台(由构建SDK使用)/li>
  • 用于实际执行应用程序的运行时平台,该平台应支持目标平台的API特性/li>

在本例中,构建SDK是5,目标平台是3.1;这是一个精细构建的SDK5,它知道所有关于。NET Core3.1的目标特性,所以它知道该做什么。只要运行库至少是。NET Core3.1,它就应该是正常的(如果我们假定在未来的运行库环境中没有人对核心库进行突破性的更改)。

构建SDK是v5这一事实很有趣,但在很大程度上无关紧要--他们可以给构建SDK提供完全不同的版本号,并且一切都仍然可以工作。让它们保持同步是很有用的,这样你就知道什么是什么了。

如果您真的想要使用特定的构建SDK而不是默认的(这很大程度上意味着:最高的):这就是可以为您提供的功能。

匿名用户

null

如果您在5.0中遇到问题(甚至在构建基础结构中也有一些突破性的更改),您可以在项目根目录中创建一个名为的文件,告诉构建系统使用哪个SDK。

null

{
  "sdk": {
    "version": "3.1.101",
    "rollForward": "minor"
  }
}