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

Bitbucket自托管Windows Runner报MSB1009错误求助

Bitbucket自托管Windows Runner流水线问题排查与解决

问题描述

1. MSBuild找不到解决方案文件

流水线配置文件bitbucket-pipeline.yml内容:

pipelines:
  default:
    - step:
        name: Build and test
        runs-on:
          - "windows"
        script:
          - nuget.exe restore .\MyProject.sln -source "https://api.nuget.org/v3/index.json;http://nuget.mycompany.com/nuget"
          - msbuild .\MyProject.sln 

执行时抛出错误:

MSBUILD : error MSB1009: Project file does not exist.
Switch: .\MyProject.sln

已通过ls命令确认解决方案文件存在,尝试绝对路径后问题依旧。

2. 代码克隆环节GitCredentialManager异常

克隆代码时出现未处理异常:

Cloning into 'C:\Windows\system32\a\bin\..\t\3adbb782-beda-5972-b527-6102602fdbb8\1684652729856\build'...

Unhandled Exception: System.ComponentModel.Win32Exception: The directory name is invalid
   at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at GitCredentialManager.GitProcess.get_Version()
   at GitCredentialManager.GitProcessConfiguration.GetCanonicalizeTypeArg(GitConfigurationType type)
   at GitCredentialManager.GitProcessConfiguration.TryGet(GitConfigurationLevel level, GitConfigurationType type, String name, String& value)
   at GitCredentialManager.GitConfigurationExtensions.TryGet(IGitConfiguration config, String name, Boolean isPath, String& value)
   at GitCredentialManager.Settings.<GetSettingValues>d__5.MoveNext()
   at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
   at GitCredentialManager.Settings.TryGetSetting(String envarName, String section, String property, String& value)
   at GitCredentialManager.Settings.GetTrace2Settings()
   at GitCredentialManager.CommandContext..ctor(String[] argv)

解决方案

针对GitCredentialManager克隆异常

  1. 修改Runner工作目录
    自托管Runner默认工作目录在C:\Windows\system32,该目录权限限制较多,容易引发路径异常。修改为非系统目录:

    • 打开Runner安装目录下的config.toml配置文件
    • 修改workdir字段为自定义路径(如D:\BitbucketRunner\Workspaces)
    • 保存配置后重启Bitbucket Runner服务
  2. 更新Git Credential Manager
    卸载当前版本的Git Credential Manager,安装最新稳定版,确保与Runner使用的Git版本兼容。

  3. 检查Git环境变量
    确认git.exe所在路径已添加到系统PATH环境变量,且Runner服务的运行用户有权限访问该路径。

针对MSBuild找不到解决方案文件问题

  1. 强制切换到代码克隆目录
    在脚本开头添加目录切换命令,确保后续操作在正确的仓库目录执行:

    script:
      - cd $BITBUCKET_CLONE_DIR
      - nuget.exe restore .\MyProject.sln -source "https://api.nuget.org/v3/index.json;http://nuget.mycompany.com/nuget"
      - msbuild .\MyProject.sln
    
  2. 使用环境变量拼接绝对路径
    用Bitbucket内置环境变量生成解决方案文件的绝对路径,避免相对路径解析问题:

    script:
      - nuget.exe restore "$BITBUCKET_CLONE_DIR\MyProject.sln" -source "https://api.nuget.org/v3/index.json;http://nuget.mycompany.com/nuget"
      - msbuild "$BITBUCKET_CLONE_DIR\MyProject.sln"
    
  3. 指定MSBuild完整路径
    若系统中存在多个MSBuild版本,直接指定对应.NET Framework版本的MSBuild路径:

    script:
      - cd $BITBUCKET_CLONE_DIR
      - nuget.exe restore .\MyProject.sln -source "https://api.nuget.org/v3/index.json;http://nuget.mycompany.com/nuget"
      - & "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\msbuild.exe" .\MyProject.sln
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:25:18