GitLab CI中.net-core跨仓库项目引用构建报错如何解决
你遇到的MSB3202报错核心是CI运行环境中不存在Repo2的项目文件,按照以下步骤配置即可实现不修改本地sln原有路径,让CI正常拉取Repo2并完成构建:
C:\Program Files (x86)\Microsoft Visual
Studio\2019\BuildTools\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets(285,5):
error MSB3202: The project file
"C:\GitLab-Runner\builds\MGzxzeVN\0\Path\To\Project2.csproj" was not
found. [C:\GitLab-Runner\builds\MGzxzeVN\0\Path\To\Project1.sln]
配置步骤
1. 配置Repo2访问凭证
- 进入Repo1的GitLab仓库后台,打开「设置」-「CI/CD」-「变量」页面
- 新增变量,变量名可自定义为
REPO2_TOKEN,值为具有Repo2读取权限的个人访问令牌(令牌权限至少勾选read_repository) - 勾选「掩码变量」选项,避免令牌在CI日志中泄露,保存配置
2. 调整.gitlab-ci.yml配置
有两种方案可选,推荐第一种无需修改现有项目配置:
方案一:对齐本地引用路径(无需修改项目/sln文件)
直接在CI环境中把Repo2克隆到和本地sln配置完全一致的相对路径即可,示例配置如下:
build: stage: build tags: - windows # 替换为你实际使用的Windows Runner标签 before_script: # 进入Repo1工作目录的上级目录,对齐你本地的目录层级 - cd $CI_BUILDS_DIR/$CI_PROJECT_PATH/../ # 克隆Repo2的master分支,--depth 1只拉最新提交提升速度 - git clone --depth 1 --branch master https://oauth2:${REPO2_TOKEN}@你的GitLab服务域名/Repo2所属命名空间/Repo2.git # 回到Repo1的工作目录 - cd $CI_PROJECT_DIR script: - dotnet build Path/To/Project1.sln -c Release
方案二:自定义Repo2存放路径
如果不想对齐本地路径,可以通过构建参数指定项目引用路径,仅需要微调项目文件,不影响本地开发:
- 先修改Repo1中Project1的.csproj文件,把原本的固定ProjectReference路径改为变量形式:
<ProjectReference Include="$(Project2Dir)/Path/To/Project2.csproj" />
- 在本地Repo1根目录新增
Directory.Build.props文件,配置本地的Repo2路径,该文件可加入.gitignore不提交到仓库:
<Project> <PropertyGroup> <Project2Dir>你本地Repo2的根目录绝对/相对路径</Project2Dir> </PropertyGroup> </Project>
- 修改CI配置,克隆Repo2到自定义路径后,构建时传入变量值即可:
build: stage: build tags: - windows before_script: # 克隆Repo2到当前工作目录下的external文件夹 - New-Item -ItemType Directory -Path ./external -Force - git clone --depth 1 --branch master https://oauth2:${REPO2_TOKEN}@你的GitLab服务域名/Repo2所属命名空间/Repo2.git ./external/Repo2 script: # 构建时传入Project2Dir参数 - dotnet build Path/To/Project1.sln -c Release /p:Project2Dir=./external/Repo2
注意事项
- 确保你使用的GitLab Runner已安装git工具,且运行用户对目标克隆路径有读写权限
- 如果Repo2更新频繁,可去掉
--depth 1参数拉取完整历史,大部分场景下浅克隆足够使用
内容的提问来源于stack exchange,提问作者Kantine
相关产品推荐
相关产品推荐

