在Windows Server 2012上用MSBuild构建.NET 6项目遇版本字符串错误
解决方案
问题分析
本地构建正常但服务器上出现NETSDK1004错误,是因为服务器未执行NuGet包还原;后续添加restore目标后出现版本号错误,根源是IBM RTC传入的v1.0.27带v前缀,不符合NuGet版本号规范(NuGet版本号不能包含v前缀)。
具体解决步骤
1. 修正版本号格式
RTC触发构建时传入的版本号带v前缀,需要先移除前缀再用于构建:
- 若通过RTC流水线参数传递版本号,直接修改参数值为
1.0.27(去掉v)。 - 若无法修改流水线参数,可在批处理脚本中添加字符串处理逻辑提取纯版本号:
@echo off :: 假设RTC传入的版本号存于VERSION变量 set "VERSION=v1.0.27" set "PURE_VERSION=%VERSION:v=%"
2. 拆分还原与构建命令
避免将restore和rebuild放在同一条MSBuild命令中,分开执行更稳定:
:: 单独执行NuGet还原,传入处理后的纯版本号 %MSBUILDPATH% C:\source\EMS\EMS.sln /t:restore /p:Configuration=Release /p:Version=%PURE_VERSION% :: 执行重建操作 %MSBUILDPATH% C:\source\EMS\EMS.sln /t:rebuild /p:Configuration=Release /p:Version=%PURE_VERSION%
3. 清理服务器NuGet缓存
若服务器存在缓存损坏问题,执行清理命令:
dotnet nuget locals all --clear
4. 验证服务器环境配置
- 确认
%MSBUILDPATH%指向正确的MSBuild版本(对应.NET 6的MSBuild可在C:\Program Files\dotnet\sdk\6.0.401\MSBuild.dll或VS BuildTools路径中找到)。 - 用
dotnet --version命令验证服务器已安装.NET 6 SDK 6.0.401版本。
内容的提问来源于stack exchange,提问作者AMDI
相关产品推荐
相关产品推荐

