【发布时间】:2014-01-13 15:05:47
【问题描述】:
我正在为超大型系统(300 多个项目)编写构建/ci/deploy 流程。这是一个 C# .net 项目,我们使用 Visual Studio 进行开发 IDE 和 MSBuild(来自 psake 任务)来编译我们的解决方案。
有多个解决方案包含多个项目,更糟糕的是,一些项目被引用为 .csproj 文件,而一些被引用为 .dll。构建重构的第一步将是实现所有项目将通过 csproj 文件相互引用。这样我就可以创建一个包含所有项目的主解决方案,并使用 MSBuild 支持的并行构建,这将非常适合 CI 构建。
但对于部署构建,我想使用链式构建和人工制品依赖项。
我想象我的构建如下:
1. 搭建公共图书馆
1.1 将 .dll 作为 common.zip 存储在人工制品中
2. 使用 1.1 中的人工制品并构建 CoreProduct
2.1 将 CoreProduct 中的 .dll 存储在 artefacts 中作为 product.zip
...等等(这样还有 20 个步骤)...
问题在于 CoreProduct 的 CommonLibrary 引用为 .csproj,而这些 .csproj 文件不会作为 CoreProduct 构建存在,为什么会出现这种情况,因为 CommonLib 已经构建并且人工制品已准备好。 MSBuild 项目文件(CSPROJ 文件)包含有关需要编译的文件以及有关引用项目而不是解决方案文件的信息,因此我无法为部署系统创建单独的 .csproj 文件,开发人员将使用他们的类文件并将其添加到不同的项目文件中我将不得不管理这两个项目文件(例如 real.csproj 和 real.CI.csproj)之间的困难同步。 我可以使用 T4 模板来生成这两个文件,但这样我会从 Visual Studio 轻松添加文件。
.csproj 中的条件部分不在图片中,因为有超过 50 名开发人员并且了解到现在添加引用需要调整 .csproj 文件是不可能的 :)
我正在寻找如何解决这个问题的模式/想法
【问题讨论】:
-
+1 以清晰的方式解释整个问题
标签: visual-studio build msbuild teamcity csproj