.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 win10-x64使用命令 dotnet publish --framework net8.0 --runtime win-x64

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

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

另请参阅