TFS / msbuild,构建项目参考

时间:2019-03-11 20:09:46

标签: tfs msbuild azure-devops tfsbuild azure-pipelines

我正在努力获取Azure Devops Server 2019(正式版)来构建我的复杂项目设置。

我有多种构建各种BizTalk应用程序的解决方案。其中一些解决方案引用了其他解决方案/存储库中的某些项目。这在Visual Studio中可以正常工作(假设每个人都将其存储库命名为默认存储库)。

为使该构建自动化,我创建了一个多阶段构建管道,该管道按顺序构建每个解决方案。

虽然解决方案1将成功构建,但是对于解决方案2,msbuild任务将不会引用已作为解决方案中的项目引用包含的项目的输出。

这似乎是因为这些引用的项目没有标记为要构建-因为如果没有它们又在主要解决方案等中依次引用其他项目,它们将无法构建自己。

一切捆绑到一个大的超级解决方案文件中是不可行的。

我想让msbuild / reference上一步中已经构建的项目,作为项目引用包括在内。但是msbuild是一个复杂的野兽,我无法找到实现此目标的方法。

我正在努力实现的目标吗?有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:0)

  

TFS / msbuild,构建项目引用

这是不同Repos中有关项目参考的已知问题,但不幸的是,它没有最佳答案。因为最好的解决方案是始终只有一个存储库。

Git将文件视为整个存储库的内容,而不是文件的集合。因此,这很难做到。解决方法是,您可以考虑使用Git SubmodulesGit Subtree

从此处查看详细信息:

Git and Visual Studio project references

此外,我们现在使用的解决方案是将共享代码放入NuGet包中。然后,您可以从任何存储库中使用该软件包,而不必执行任何不稳定的git设置并保持应有的访问控制。

希望这会有所帮助。

答案 1 :(得分:0)

我终于重新考虑了这一点,并做了更多的实验。

我所看到的使TFS / msbuild能够/引用其他项目输出的唯一方法是在解决方案构建配置中将其标记为要构建。

现在,如果您在Visual Studio中执行此操作,然后尝试构建具有其他解决方案中的项目的解决方案,则如果以前的解决方案尚未完全构建,则构建将失败(因为不会链接其他依赖项)内置)。这是有道理的。

但是使用TFS / msbuild,构建将成功。据我所知,正在发生某种魔术,可以确保以某种方式解决所有解决方案之间的依赖关系。这可能很幸运,可能是特定的行为(到目前为止对我有用)。

当然,问题在于它与Visual Studio不兼容。因此,在每个解决方案文件中都有一个额外的“构建”定义设置,其中所有项目均设置为构建。

这似乎是管理很多相互关联的解决方案而不需要一个大解决方案的最简单方法。

答案 2 :(得分:0)

似乎msbuild已更改为仅引用项目引用,并且您可以通过在运行msbuild时将属性OnlyReferenceAndBuildProjectsEnabledInSolutionConfiguration设置为true来还原为引用所有引用。

来源:https://stackoverflow.com/a/25144169

已确认此方法有效。