project.assets.json含意外目标引发NETSDK1047错误的解决方法
解决NETSDK1047错误的方案
原因分析
.NET Framework工具链对带OS版本的Runtime Identifier(如win7-x86)会自动映射到基础RID(win-x86),但restore生成的project.assets.json中虽包含该目标,构建时却无法正确匹配,从而触发报错。
方案一:改用基础Runtime Identifiers
修改项目配置,将net48对应的RuntimeIdentifiers替换为不带OS版本的基础RID,适配.NET Framework工具链的处理逻辑:
<PropertyGroup> <TargetFrameworks>net48;net8.0-windows</TargetFrameworks> <OutputType>Exe</OutputType> </PropertyGroup> <PropertyGroup Condition="'$(TargetFramework)'=='net48'"> <RuntimeIdentifiers>win-x64;win-x86</RuntimeIdentifiers> </PropertyGroup>
操作步骤:
- 删除项目根目录下的
obj文件夹 - 重新执行
dotnet restore - 再次执行构建命令
方案二:构建时明确指定目标RID
如果必须保留win7-*格式的RID,构建时直接指定对应的RID,避免工具自动映射到基础RID:
# 针对win7-x86构建 dotnet build -r win7-x86 # 针对win7-x64构建 dotnet build -r win7-x64
方案三:禁用RID自动映射
添加UseRidGraph属性禁用RID的自动映射逻辑,阻止生成额外的win-x86目标:
<PropertyGroup> <TargetFrameworks>net48;net8.0-windows</TargetFrameworks> <OutputType>Exe</OutputType> </PropertyGroup> <PropertyGroup Condition="'$(TargetFramework)'=='net48'"> <RuntimeIdentifiers>win7-x64;win7-x86</RuntimeIdentifiers> <UseRidGraph>false</UseRidGraph> </PropertyGroup>
操作步骤:
- 删除项目根目录下的
obj文件夹 - 重新执行
dotnet restore - 再次执行构建命令
内容的提问来源于stack exchange,提问作者Yola
相关产品推荐
相关产品推荐

