我目前正在开展的项目由多个团队开发,每个团队负责项目的不同部分。他们都设置了自己的C#项目和解决方案,其配置设置特定于他们自己的需求。但是,现在我们需要创建另一个全局解决方案,它将所有项目组合并构建到同一个输出目录中。
我遇到的问题是,我发现只有一种方法可以将所有项目构建到同一个输出目录中 - 我需要修改所有项目的配置。这就是我们想要避免的。我们希望所有这些项目都不了解这种“全球”解决方案。每个团队都必须保留仅使用自己的子解决方案工作的可能性。
一种可能的解决方法是为所有项目创建一个特殊配置,仅用于此“全局”解决方案,但这可能会产生额外的问题,因为现在您必须不断地将此配置设置与特定团队使用的常规配置设置同步。我们要做的最后一件事是花费数小时试图弄清楚为什么某些东西在全局解决方案下构建时不起作用只是因为开发人员已经检查了他们的配置中的一些复选框,但忘记在全局配置中这样做。 / p>
因此,为简化起见,我们需要某种输出目录设置或后期构建事件,这些事件只有在从全局,全包解决方案构建时才会出现。有没有办法在不改变项目配置的情况下实现这一目标?
更新1
我想我需要提一些额外的细节:
我们需要这个全局解决方案尽可能接近最终用户在安装我们的应用程序时获得的内容,因为当我们需要弄清楚应用程序的哪个部分时,我们打算用它来调试整个应用程序。在将此错误发送给负责该部分的团队之前,请先工作。
这意味着在全局解决方案下构建时,输出目录层次结构应该与安装后的Program Files中的相同,因此,例如,如果我们有Program Files / MyApplication / Addins文件夹,其中包含所有由不同团队开发的插件,我们需要全局解决方案从插件项目中复制二进制文件并相应地将它们放在输出目录中。
问题是,开发一个插件的团队不必知道它是一个插件,它应该放在该文件夹中,因此他们不能将其相对输出目录更改为build / bin / Debug / Addins。
答案 0 :(得分:2)
这里的关键是团队负责可交付成果。该可交付成果是二进制文件的集合。因此,“全球”解决方案......或“使用团队可交付成果的产品”有兴趣确保所有“当前可交付成果”协同工作。也就是说,您可以通过协作努力获得可交付成果。
所以这引出了一些问题。团队是否提供他们认为是“发布”的内容。这可能在构建系统中是自动的。如果它构建并且所有测试都通过,则发布它。
您正在寻找的是团队发布或推广发布。源代码是你如何到达那里,二进制文件是结果。每个团队控制它认为是发布的二进制文件(这可以由构建系统自动化)。
不完全是你提出的要求,但我希望这是能够产生良好结果的正确答案的答案。
答案 1 :(得分:1)
一种非常简单的方法是创建解决方案。包括所有项目并添加项目(或更多)以处理全局解决方案构建任务。然后,全局解决方案中的项目应该引用他们需要的项目,然后让Visual Studio处理如何从每个项目中获取二进制文件。它们(在正常情况下)将被复制到构建项目的输出文件夹中。因此,专门为全局构建任务添加的项目将具有所有引用项目的副本
另一种方法是创建一个引用其余构建脚本的全局MSBuild脚本。每个项目都有自己的MSBuild脚本
修改强>
从评论看,似乎有两类项目。一个需要建设,一个不需要建设。
对于那些需要构建引用它们作为聚合项目中的项目的那些不需要构建的项目,将它们添加为引用或将dll添加为资源。
使用后者将Build操作的属性更改为None,并将其复制到输出目录以复制(如果较新的话)
在这两种情况下,您现在都在输出目录中拥有所有dll,然后您可以在聚合项目移动应该在特定文件夹中的dll(即不在输出中)上进行后期构建操作文件夹)
答案 2 :(得分:0)
查看Continuous Integration的做法以及使用脚本版本构建构建服务器的做法。在开发团队应用程序的不同部分时,这是一个不可或缺的工具,您的问题很好地说明了原因。
答案 3 :(得分:0)
如果使用版本控制系统,则未提及。我在实践中发现,每个开发人员都维护他/她/他们的团队配置并在本地机器上进行构建,因为您不检查* .suo或* .user文件,大多数个人配置仅影响单个团队成员。
在完全独立的机器上检出所有存储库中的相同代码,并在构建机器上编译项目(这可以完全自动化)。这可以保持构建服务器的独立性。
不要担心它是一个“解决方案”。您可以轻松地一个接一个地构建多个解决方案。
由于输出路径是相对的(可能是“bin \ Debug”),因此只要你检查出来,它就会被构建。如果您希望所有二进制文件位于同一输出文件夹中,则可以调整每个配置上的输出路径以进行匹配。像“.... \ bin \ Debug”之类的东西(显然这会影响项目在本地机器上构建的位置,但可能无关紧要)。这样,多个项目将构建相同的目标输出。
您还可以在构建服务器上包含一个单独的安装程序构建,该服务器不在每个开发人员本地计算机上以打包最终产品。