Bamboo构建.NET Framework4.6.1项目遇错:包缺失且调用.NET SDK5
问题分析:MSBuild 2019构建.NET Framework4.6.1项目时调用.NET SDK 5并报NETSDK1064错误
为什么构建会调用.NET SDK 5?
- MSBuild 2019默认优先使用环境变量中配置的.NET SDK版本,若系统已安装.NET 5 SDK且设为默认版本,就会被调用处理项目——哪怕项目目标框架是.NET Framework。
- 若你的
Host.csproj采用了新的SDK格式(开头为<Project Sdk="Microsoft.NET.Sdk">),即便目标框架是.NET Framework,也会触发.NET Core/.NET SDK参与依赖解析等构建环节。
NETSDK1064错误的原因
- 还原方式不匹配:手动执行的
nuget restore和.NET SDK 5依赖的dotnet restore逻辑存在差异,SDK无法识别旧方式生成的依赖信息,导致找不到指定包。 - 路径长度超限:Bamboo工作目录路径过长(
C:\Atlassian\Bamboo-home\local-working-dir\216039426\ACLTI-ALBB-JOB1\),超出Windows默认路径长度限制,导致还原的包文件未正确写入或MSBuild无法读取。 - 依赖信息缺失:手动还原未生成.NET SDK所需的
obj/project.assets.json文件,MSBuild使用SDK 5时依赖该文件解析包,因此报错包未找到。
解决建议
- 指定MSBuild工具链:在Bamboo构建命令中使用MSBuild 2019的完整路径,而非依赖环境变量中的
dotnet msbuild,例如:"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" Host.csproj /t:Build /p:TargetFramework=net461 - 统一还原与构建步骤:放弃手动
nuget restore,改用MSBuild自带的还原参数,确保还原和构建使用同一工具链:msbuild Host.csproj /t:Restore,Build /p:TargetFramework=net461 - 缩短工作目录路径:修改Bamboo的工作目录配置,减少路径层级,避免触发Windows路径长度限制。
- 显式指定SDK版本:若项目为SDK格式,在项目根目录添加
global.json文件,指定兼容.NET Framework的SDK版本(如3.1 LTS):{ "sdk": { "version": "3.1.426" } }
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

