针对 .NET Framework 时使用的默认 RID

在 .NET 8 中,引入了一项更改,即在针对 net8.0 和更高版本时,使用较小的运行时标识符 (RID) 图

然而,这对同时面向 .NET 和 .NET Framework 开发的客户造成了困扰。 这是因为还原发生一次,但 .NET Framework 项目尝试使用旧的 RID 默认值,而 .NET (Core) 项目尝试使用新的缩减 RID 图。

若要实现此多目标场景,现在在此场景中使用与新的 RID 图表兼容的默认 RID。

引入的版本

.NET 9 GA

以前的行为

面向 .NET Framework 且未设置 RID 的 SDK 样式项目默认为 win7-x86win7-x64

新行为

面向 .NET Framework 且未设置 RID 的 SDK 样式项目默认为 win-x86win-x64

中断性变更的类型

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

更改原因

.NET Framework 应用程序得到的默认 RID 与可移植 RID 图不兼容。 由于这种不兼容性,导致出现还原错误。

Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(266,5): 错误 NETSDK1047: 资产文件 'D:\1\s\artifacts\obj\MSBuild\project.assets.json' 没有针对 'net472/win7-x64' 的目标。 确保还原已运行,并且你已将“net472”包含在项目的 TargetFrameworks 中。 可能还需要在项目的 RuntimeIdentifiers 中包含“win7-x64”。 [MSBuild.csproj::TargetFramework=net472]>

有关详细信息,请参阅 dotnet/sdk 问题 #35575

如果受此更改影响,请选择以下操作之一:

  • 将运行时标识符更新为可移植 RID 图支持的值。 项目文件示例:

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

    如果将 RID 指定为命令行参数,请进行类似的更改。 例如,dotnet publish --runtime win-x64

  • 在项目文件中将 UseRidGraph 设置为 true,以切换回旧的 RID 图。

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

受影响的 API

没有。