面向 .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 属性设置为UseRidGraph
true
。 但是,将来不会更新旧的 RID 图以尝试处理任何其他发行版或体系结构。
<PropertyGroup>
<UseRidGraph>true</UseRidGraph>
</PropertyGroup>