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