【起因是我想用rider编译虚幻引擎,但是发现一直不成功,找不到这个文件】
一开始我以为是自己安装的不够完整,于是卸载又安装.NET SDK
但是无论怎么安装.NET 8.0.XXX SDK,反复安装卸载,都依然没有这个文件Files\dotnet\sdk\8.0.413\Sdks\Microsoft.NET.SDK.WorkloadAutoImportPropsLocator\Sdk”
【咨询AI得到原因】
解决办法
之所以记录,是因为这个问题真的找了好久的办法,终于试到以下办法可以编译通过了,太不容易了
方法一: 先禁用 Workload 解析(官方推荐的临时解法)
在 PowerShell(管理员) 执行(设为长期,对 Rider/VS 也生效):
setx MSBuildEnableWorkloadResolver false
作用:MSBuild 会跳过
Microsoft.NET.Sdk.ImportWorkloads.props的自动导入逻辑,很多环境到这一步已经能编过了。
若你已设过这变量也没用,继续执行 B 步。
【尝试了方法一,我就可以编译通过了】
其他方法没尝试
方法二: 手工放一个“最小占位 SDK”(0 逻辑、只负责不报错)
原理:那条出错的语句是
<Import Project="AutoImport.props" Sdk="Microsoft.NET.SDK.WorkloadAutoImportPropsLocator" />
它只要在 你正在用的 SDK 的Sdks\Microsoft.NET.Sdk.WorkloadAutoImportPropsLocator\Sdk里找到一个AutoImport.props就不会报错。
我们创建一个空实现的AutoImport.props(以及可选的Sdk.props),不改变任何构建行为,只是避免解析失败。
把下面整段 原样 复制到 PowerShell(管理员)里执行(路径按你现在使用的 SDK 版本改;你之前是 D:\dotnet-sdk\sdk\8.0.316):
# 1) 把路径改成你当前 dotnet --list-sdks 显示的那条
$SdkRoot = "D:\dotnet-sdk\sdk\8.0.316"
$Locator = Join-Path $SdkRoot "Sdks\Microsoft.NET.Sdk.WorkloadAutoImportPropsLocator\Sdk"
New-Item -ItemType Directory -Force $Locator | Out-Null
# 2) 放一个“空实现”的 AutoImport.props(MSBuild 只要找到这个文件就不再报缺失)
@'
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- no-op placeholder to satisfy Import Project="AutoImport.props" Sdk="Microsoft.NET.SDK.WorkloadAutoImportPropsLocator" -->
<PropertyGroup />
</Project>
'@ | Out-File -Encoding utf8 -NoNewline (Join-Path $Locator "AutoImport.props")
# 3) 可选:再放一个极简 Sdk.props(一些 MSBuild 版本在解析 Sdk= 时会顺带探测 Sdk.props)
@'
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- no-op -->
</Project>
'@ | Out-File -Encoding utf8 -NoNewline (Join-Path $Locator "Sdk.props")
# 4) 确认文件存在
Get-ChildItem $Locator
看到目录里有 AutoImport.props(和 Sdk.props)就行。
方法三: 用同一份 SDK 编译(避免“用到别的坏 SDK”)
- 在 UE 根目录(例如
D:\Program Files\Epic Games\UE_5.6)放global.json锁版本(把版本号改成你dotnet --list-sdks看到的那一条,比如8.0.316):
cd "D:\Program Files\Epic Games\UE_5.6"
@'
{
"sdk": { "version": "8.0.316", "rollForward": "latestMinor" }
}
'@ | Out-File -Encoding ascii -NoNewline .\global.json
dotnet --version # 这里应该回显 8.0.316
2. 清缓存 + 重新生成 + 编 UBT:
dotnet nuget locals all --clear
.\GenerateProjectFiles.bat -2022
# 用 VS 的 amd64 MSBuild,构建 UBT(路径按你本机 VS 改;如果 VSINSTALLDIR 为空,先打开一次 VS)
& "$env:VSINSTALLDIR\MSBuild\Current\Bin\amd64\MSBuild.exe" `
"Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.csproj" `
/restore /p:Configuration=Development
如果你偏好 Rider,重启 Rider 后直接 Build 即可(它会继承我们设置的环境变量和占位文件)。