GitLab使用Docker镜像的msbuild构建.NET Framework项目找不到路径怎么解决
错误核心原因
你硬编码的MSBUILD_PATH路径和compulim/msbuild镜像内的实际MSBuild安装路径不匹配,你写的是VS2017 BuildTools的路径,但该镜像默认版本通常预装更高版本的VS BuildTools(2019/2022),路径规则不一致导致找不到可执行文件。
解决步骤
- 第一步:先确认镜像内的实际文件路径,在
script块最前面临时增加两行命令打印路径,跑一次构建就能拿到正确地址:
# 查找所有MSBuild.exe的实际路径 Get-ChildItem "C:\Program Files (x86)\Microsoft Visual Studio\" -Recurse -Filter MSBuild.exe | Select-Object FullName # 查找nuget的实际路径 where.exe nuget
- 第二步:替换
variables里的路径为查到的实际值,推荐使用Current版本标识避免后续版本升级路径变更,VS2022版本的通用路径参考:
variables: # VS2022 BuildTools通用MSBuild路径,不用绑定具体版本号 MSBUILD_PATH: 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe' # 多数镜像已将nuget加入环境变量,直接写nuget即可不用全路径 NUGET_PATH: 'nuget'
- 第三步:补充必要的构建前置步骤,构建.NET Framework项目前需要先做NuGet包还原,否则会出现依赖缺失报错:
script: - echo "start building" # 新增nuget还原步骤,替换为你自己的解决方案文件名 - '& "$env:NUGET_PATH" restore 你的解决方案名.sln' - '& "$env:MSBUILD_PATH" /p:Configuration=Release /clp:ErrorsOnly' - '& "$env:MSBUILD_PATH" WebCICD\WebCICD.csproj /p:DeployOnBuild=true /p:Configuration=Release /P:PublishProfile=FolderProfile.pubxml' - Tree
- 第四步:建议给镜像指定固定tag,避免镜像更新后安装路径发生变化,比如
image: compulim/msbuild:latest。
修改后完整配置参考
.shared_windows_runners: tags: - shared-windows - windows - windows-1809 variables: MSBUILD_PATH: 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe' NUGET_PATH: 'nuget' stages: - build build: extends: - .shared_windows_runners stage: build image: compulim/msbuild:latest script: - echo "start building" - '& "$env:NUGET_PATH" restore 你的解决方案名.sln' - '& "$env:MSBUILD_PATH" /p:Configuration=Release /clp:ErrorsOnly' - '& "$env:MSBUILD_PATH" WebCICD\WebCICD.csproj /p:DeployOnBuild=true /p:Configuration=Release /P:PublishProfile=FolderProfile.pubxml' - Tree
内容的提问来源于stack exchange,提问作者Doraemon
相关产品推荐
相关产品推荐

