.Net 5 SDK 和 .Net 6 SDK 并排支持

.Net 5 SDK and .Net 6 SDK Side by Side Support

我有一个构建服务器,用于构建我的 .Net 5 应用程序(上面安装了 .Net 5 SDK)。

我想在同一个构建服务器上安装 .Net 6 SDK,并将其用于构建现有的 .Net 5 应用程序和新的 .Net 6 应用程序。

但我担心,当我安装 .Net 6 SDK 时,它可能会导致 .Net 5 应用程序的构建过程发生变化。特别是当 .Net 5 应用程序部署到没有安装 .Net 6 的服务器时。

我问这个的原因是因为历史上它一直是个问题。 在同一台机器上构建两个应用程序时,一个在 .Net Framework 4.0 上,另一个在 .Net Framework 4.8 上,会涉及到一些微妙之处。安装 .Net Framework 4.8 时,它会升级 .Net Framework 4.0 程序集。然后当你构建一个 4.0 应用程序时,它使用 4.8 但“目标”4.0 试图让它看起来像 .Net Framework 4.0(对于 .Net Framework 4.0 应用程序)。但它确实是 .Net Framework 4.8。这导致了微妙的、难以发现的错误。

我想知道在同一台机器上构建 .Net 5 和 .Net 6 应用程序时是否存在类似问题。

当我在构建服务器上安装 .Net 6 SDK 时,是否 affect/upgrade .Net 5 SDK 库?(类似于 .Net Framework 4.x 做到了。)

  1. 在项目文件中指定目标框架

    安装好不同的SDK后,可以这样指定目标框架。 Here 是这方面的更多信息。

<Project Sdk="Microsoft.NET.Sdk">     
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>     
</Project>

您还可以指示 msbuild preprocess 该文件,这样您就可以看到它的输出结果;通过 运行 执行这样的命令 dotnet msbuild -property:TargetFramework=netcoreapp3.1-preprocess:output.xml

  1. 使用 global.json 文件

    在项目的根目录中创建一个名为 global.json 的文件。以这种方式指定版本

{
  "sdk": {
    "version": "5.0.0"
  }
}

默认情况下,所有安装都是并排的。但是,当您 运行 命令如 dotnet new 时,SDK 默认为最新版本。 Here 是关于选择过程的更多信息

简答:

长答案:

  1. NET SDK 6 可能导致 Windows 上的 PATH 配置错误。我在我们的构建服务器上亲身经历过这个问题。在重启动、清除服务器上的缓存后,我们决定使用全新的 SDK 安装重新创建它。我们有一个错误:

Could not execute because the application was not found or a compatible .NET SDK is not installed.

100% 确定之前发生的唯一事情是安装新的 SDK。