.NET SDK 使用更小的 RID 图

面向 .NET 8 或更高版本的项目现在使用更小的“可移植”运行时标识符 (RID) 图。

旧行为

.NET SDK 使用复杂的 RID 图来确定生成或发布项目时的资产。

新行为

从 .NET 8 开始,.NET SDK 对面向 .NET 8 或更高版本的项目使用更小的图形,该图只包含可移植 RID。 这意味着该 SDK 在默认情况下,无法识别特定于版本或特定于发行版的 RID。 生成项目时,可能会看到以下(或类似)错误:

错误 NETSDK1083: 无法识别指定的 RuntimeIdentifier "win10-x64"。 有关详细信息,请参阅https://aka.ms/netsdk1083

引入的版本

.NET 8 RC 1

中断性变更的类型

此更改是行为变更,也可能会影响源兼容性

更改原因

RID 图的维护和理解成本很高,要求 .NET 本身以一种脆弱的方式进行发行版感知。 .NET 团队和社区花费了大量的时间来更新该图并将此类更新向后移植到以前的版本。 长期目标是停止更新 RID 图,停止读取它,并最终删除它。 此中断性变更是迈向该目标的一步。

请使用可移植的 RID(例如 linux-<arch>linux-musl-<arch>osx-<arch>win-<arch>),而不是特定于版本的或特定于发行版的 RID(例如 ubuntu.16.04-<arch>osx.10.11-<arch>win10-<arch>)。

如果在项目文件(*.csproj、*.vbproj 或 *.fsproj)中使用 RuntimeIdentifier MSBuild 属性指定 RID,请相应地更改它。 例如,在项目文件中将 <RuntimeIdentifier>win10-x64</RuntimeIdentifier> 更改为 <RuntimeIdentifier>win-x64</RuntimeIdentifier>

<PropertyGroup>
  ...
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

如果将 RID 指定为命令行参数,请进行类似的更改。 例如,请使用 dotnet publish --framework net8.0 --runtime win-x64,而不是 dotnet publish --framework net8.0 --runtime win10-x64

如果需要还原为以前使用旧的完整 RID 图的行为,可以在项目文件中将 UseRidGraph MSBuild 属性设置为 true。 但是,将来不会为了尝试处理任何其他发行版或体系结构而更新旧的 RID 图。

<PropertyGroup>
  <UseRidGraph>true</UseRidGraph>
</PropertyGroup>

另请参阅