You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Action自托管Windows代理专用盘运行MSBuild报错排查

问题原因

你的工作流配置存在3个核心错误,直接导致构建失败:

  • CMD shell变量引用语法完全错误:你在shell: cmd的步骤里混用了bash风格的$变量名语法,CMD环境下仅识别%变量名%格式的变量引用,未被解析的$DRIVE会被当做普通字符串传入命令,就是报错里Project file does not exist. Switch: $DRIVE\ms-tools-core\src\network.VisualStudio.sln的直接原因。你代码里写的$DRIVE%属于半拼接的错误格式,完全无法被CMD识别。
  • subst盘符映射参数错误:你定义的DRIVE环境变量值为P:\带末尾反斜杠,但subst命令仅接受盘符+冒号(即P:)作为参数,带反斜杠会直接触发The system cannot find the path specified报错,盘符映射根本没有生效。
  • 路径未做前置校验:所有路径拼接完成后没有做存在性校验,直接执行构建命令,导致前面的步骤失败后,后续命令直接拿到无效路径执行。
排查思路

按以下顺序逐步排查即可快速定位问题:

  • 变量解析校验:在run步骤最开头加echo %DRIVE% %GITHUB_WORKSPACE%命令,确认打印出来的变量值是你预期的内容,没有出现$变量名原样输出的情况。
  • subst映射校验:执行subst操作后,立刻执行subst命令查看当前系统已映射的盘符列表,再执行dir %DRIVE%\确认映射盘符下的文件和%GITHUB_WORKSPACE%下的文件完全一致。
  • 工具路径校验:在调用nuget、MSBuild之前,先执行dir "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe"这类命令,确认工具路径真实存在,注意你当前配置里同时写了x86路径和x64路径的MSBuild,要确认你实际安装的VS路径是否正确。
  • 分步执行:不要把所有命令堆在同一个run块里,可以拆成多个step执行,每一步执行完校验返回值,方便定位到底是哪一步出的错。
修复后可运行的配置参考
name: Windows_Action
on:
  push:
    branches: 
    - master 
jobs:
  build-on-windows:
    runs-on: [self-windows]
    env:
      # 注意这里不要带末尾反斜杠,适配subst命令要求
      DRIVE: P:
      DEV_TOOL_PATH: C:\DevTools
      NUGUT_TOOL_PATH: C:\DevTools\project-2022
      PRJ_VERSION: 1.12.0.1
   
    steps:
      # 注意官方公共checkout动作是actions/checkout,如果你用内部镜像可以忽略这个提示
      - uses: actions/checkout@v2
      
      - name: Map dedicated drive
        shell: cmd
        run: |
          copy E:\ram.k\packages\packagebug.vsix %GITHUB_WORKSPACE%\Package.vsix
          REM 先删除已存在的同盘符映射
          IF EXIST %DRIVE%\ (
            subst %DRIVE% /d
          )
          REM 建立新的盘符映射
          subst %DRIVE% "%GITHUB_WORKSPACE%"
          REM 校验映射结果
          subst
          dir %DRIVE%\

      - name: MS build
        shell: cmd
        run: |
          "%DEV_TOOL_PATH%\VSIXBrander.exe" "%DRIVE%\ms-tools-core\src\network.VisualStudio.VsixSetup\source.extension.vsixmanifest" "%PRJ_VERSION%"
          call "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
          REM 校验VS开发环境加载结果
          where msbuild
          "%NUGUT_TOOL_PATH%\nuget.exe" restore "%DRIVE%\ms-tools-core\src\network.VisualStudio.sln"
          "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" "/t:restore" "%DRIVE%\ms-tools-core\src\network.VisualStudio.sln"
          "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" "%DRIVE%\ms-tools-core\src\network.VisualStudio.sln" /p:Configuration=Release /p:DeployExtension=False

注:修复时删除了重复的x86路径下的MSBuild调用,VS2022默认是64位MSBuild,如果你确实需要用x86版本可以自行加回,注意先校验路径存在。

内容的提问来源于stack exchange,提问作者user4948798

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:45:34