某些项目的自动 RuntimeIdentifier

指定以下任何属性的项目现在会自动获取运行时标识符 (RID)。 RID 支持发布独立部署。

  • SelfContained
  • PublishAot
  • PublishReadyToRun
  • PublishSingleFile
  • PublishSelfContained(仅限 .NET SDK 7.0.200 及更高版本)

以下项目可能会受到此更改的影响:

  • 规避缺少运行时标识符错误的旧项目。
  • 具有 RuntimeIdentifiers 但不具有 RuntimeIdentifier 的项目。
  • 使用不带 RID 的硬编码路径的项目。
  • 具有这些属性但使用生成而不是发布和接受发布处于中断状态的项目。

还有其他潜在的细微差别可能会打破我们尚未意识到的个人情况。

注意

此更改仅限于 .NET 7.0.200 SDK 中的 dotnet publish 命令。 有关详细信息,请参阅仅用于发布的自动 RuntimeIdentifier

引入的版本

.NET 7

旧行为

以前,这些项目无法发布,并出现以下错误:

不支持在未指定 RuntimeIdentifier 的情况下将应用程序发布到单个文件。 请指定 RuntimeIdentifier 或将 PublishSingleFile 设置为 false。

OR

错误 NETSDK1031:不支持在未指定 RuntimeIdentifier 的情况下生成或发布独立应用程序。 必须指定 RuntimeIdentifier 或将 SelfContained 设置为 false。

在某些情况下,例如 PublishSingleFile 使用特殊 RuntimeIdentifiers 逻辑,项目可能在没有 RuntimeIdentifier 的情况下成功生成。

新行为

指定本文开头列出的任何属性的项目会自动获得 RuntimeIdentifier。 这项新行为可能会导致依赖于 RuntimeIdentifiers 但不依赖于 RuntimeIdentifier 的项目的生成失败,因为 RuntimeIdentifier 可能与 RuntimeIdentifiers 不同地影响输出路径。 它还可能导致依赖于 PublishSingleFile 但在执行其他操作时不总是给出 RuntimeIdentifierAnyCPU 项目失败。 这些失败可能如下所示:

目标进程退出,但未引发 CoreCLR 启动事件。 确保目标进程配置为使用 .NET Core。

中断性变更的类型

此项更改可能会影响源兼容性

更改原因

大多数 .NET 项目无法在没有设置 RuntimeIdentifier 的情况下使用上述属性发布。 此更改减少了每次使用上述属性时手动添加 RID 的需要。

如果项目受到影响,可以通过将 <UseCurrentRuntimeIdentifier>false</UseCurrentRuntimeIdentifier> 添加到项目文件来禁用自动 RuntimeIdentifier

如果由于输出路径更改而遇到中断,请将 <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> 添加到项目文件。

请参阅