我正在努力让Azure Devops Server 2019(在线)构建我的复杂项目设置。
我有多个解决方案,可以构建各种BizTalk应用程序。其中一些解决方案引用了其他解决方案/回购中的一些项目。这在Visual Studio中工作正常(提供每个人将其repos命名为默认值,他们这样做)。
为了自动化这个构建,我创建了一个多阶段构建管道,按顺序构建每个解决方案。
虽然解决方案1将成功构建,但是当涉及解决方案2时,msbuild任务将不会引用已作为项目参考包含在解决方案中的项目的输出。
这似乎是因为这些引用的项目没有标记为构建 - 因为如果没有它们,它们将无法构建自己,而不是在主要解决方案等中引用其他项目。
将所有内容捆绑成一个大的超级解决方案文件是不可行的。
我希望msbuild能够/引用已在上一步中构建的项目,因为它们被包含在项目引用中。但是msbuild是一个复杂的野兽,我无法找到实现这一目标的方法。
我正在努力实现的目标是什么?任何人都能指出我正确的方向吗?
TFS / msbuild,构建项目引用
这是关于不同Repos中项目引用的已知问题,但不幸的是它没有最佳答案。因为最好的解决方案始终是拥有一个存储库。
Git认为文件是整个存储库的内容,而不是文件集合。因此这很难做到。作为解决方法,您可以考虑使用Git Submodules或Git Subtree:
从这里查看详细信息:
Git and Visual Studio project references
此外,我们现在使用的解决方案是将共享代码放在NuGet包中。然后,您可以使用任何存储库中的包,并且您不必执行任何不稳定的git设置并保持访问控制。
希望这可以帮助。
我终于重新审视了这个并做了一些实验。
我可以看到,将TFS / msbuild引用到/引用其他项目输出的唯一方法是在解决方案构建配置中标记它们以构建。
现在,如果您在Visual Studio中执行此操作并尝试构建具有来自其他解决方案的项目的解决方案,那么如果之前的解决方案尚未完全构建(因为其他链式依赖项尚未构建),则构建将失败。这是有道理的。
但是使用TFS / msbuild,构建将成功。据我所知,有一些神奇的东西确保所有解决方案中的依赖关系以某种方式得到解决。这可能是运气,可能是特定的行为(到目前为止它对我有用)。
问题当然是它与Visual Studio不兼容。所以我在每个解决方案文件中都有一个额外的“构建”定义设置,其中包含了要构建的所有项目。
这似乎是管理大量相互关联的解决方案的最简单方法,而不需要一个大的解决方案。