针对 .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-x86
或 win7-x64
。
新行为
面向 .NET Framework 且未设置 RID 的 SDK 样式项目默认为 win-x86
或 win-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
没有。