DevOps中.Net Core 3应用跨解决方案引用RCL的构建错误求助
我之前也碰到过几乎一模一样的场景,不用NuGet的话,咱们可以从源码检出控制和项目引用管理两个方向来搞定这个问题:
1. 在DevOps流水线中配置多仓库检出
你的错误核心在于:流水线只拉取了consumer.app的代码,而framework.rcl在另一个代码库的framework.app目录下,项目里写的相对路径../framework.app/framework.rcl/framework.rcl.csproj在流水线的源码目录里根本不存在。
以Azure DevOps为例,你可以让流水线同时检出两个代码库:
如果用YAML流水线,添加仓库资源配置:
resources: repositories: - repository: frameworkAppRepo type: git name: YourProject/framework.app ref: main # 替换成你实际需要的分支 steps: - checkout: self # 检出consumer.app代码 - checkout: frameworkAppRepo path: framework.app # 把framework.app检出到$(Build.SourcesDirectory)/framework.app目录下这样
consumer.app项目里的相对路径就能精准指向检出的RCL项目了。如果用经典编辑器,在「获取源代码」步骤里添加第二个仓库源,设置「检出路径」为
$(Build.SourcesDirectory)/framework.app,确保它和consumer.app的检出目录处于同一层级。
2. 将链接项目的引用纳入源码控制
本地Visual Studio添加现有项目后,只是在本地的.sln和项目文件里生成了引用,但这些修改没提交到consumer.app的源码控制,导致流水线拉取的代码里完全没有这个引用信息。
你需要做这些操作:
- 打开
consumer.app.sln文件,确认里面已经包含framework.rcl的项目条目,比如:Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Framework.Rcl", "..\framework.app\framework.rcl\framework.rcl.csproj", "{项目GUID}" EndProject - 同时检查
consumer.app的.csproj文件里的项目引用:<ProjectReference Include="..\framework.app\framework.rcl\framework.rcl.csproj" /> - 把这些
.sln和.csproj的变更提交并推送到consumer.app的代码库,这样流水线拉取代码时就能读取到正确的项目引用了。
3. 验证路径匹配
做完上面两步后,你可以在流水线里加一个「命令行」步骤,执行dir $(Build.SourcesDirectory)查看目录结构,确认framework.app和consumer.app处于同一层级,且framework.rcl.csproj确实在预期路径下。
这样就能在不依赖NuGet的前提下,让consumer.app的流水线正确访问到framework.rcl项目了。
内容的提问来源于stack exchange,提问作者David D

