某些项目的自动 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
但在执行其他操作时不总是给出 RuntimeIdentifier
的 AnyCPU
项目失败。 这些失败可能如下所示:
目标进程退出,但未引发 CoreCLR 启动事件。 确保目标进程配置为使用 .NET Core。
中断性变更的类型
此项更改可能会影响源兼容性。
更改原因
大多数 .NET 项目无法在没有设置 RuntimeIdentifier
的情况下使用上述属性发布。 此更改减少了每次使用上述属性时手动添加 RID 的需要。
建议的操作
如果项目受到影响,可以通过将 <UseCurrentRuntimeIdentifier>false</UseCurrentRuntimeIdentifier>
添加到项目文件来禁用自动 RuntimeIdentifier
。
如果由于输出路径更改而遇到中断,请将 <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
添加到项目文件。