跨多个解决方案重构共享代码

6

我有几个Visual Studio解决方案,它们共享一个通用项目。

例如:

Solution of the common project
  - Common project

Solution A
  - Common project
  - Custom project A

Solution B
  - Common project 
  - Custom project B

And so on...

每个解决方案都有自己的SVN存储库,供开发人员仅在特定解决方案上工作。大约会有50-60个不同的解决方案,我需要能够单独构建它们。
例如,当我重命名通用项目中其他项目中使用的方法时,是否有一种方法可以将更改应用于每个解决方案?
就像这个解决方案建议的那样(Is there a refactoring tool that works across solutions files?),我可以创建一个包含所有项目的主解决方案,并从那里进行重构,但我必须检出和更新每个存储库才能做到这一点。
我应该更改我的存储库结构吗?
是否有更好的方法来解决或避免这个问题?

你是否在使用svn:external将公共项目包含到自定义项目中? - Shane Wealti
不,我没有。开发人员必须手动检出项目,以免引用断裂。我会查看svn:external。 - Jason
2个回答

3
在Visual Studio中,无法将特定的重构应用于当前未打开的项目。重构仅应用于当前解决方案中打开的项目。
为了在大量解决方案中进行重构,最好的方法是创建一个包含所有项目的主解决方案。这可能有点笨重和缓慢,但对于大规模的重构来说可以节省很多时间。
我不太确定你所说的意思是什么。
任何涉及到所有项目的重构都将最终迫使您更新所有项目。因此,似乎您需要这样做。我感觉我在这里错过了什么。

我需要检出每个使用共享项目的单独存储库中的所有项目,以便能够使用主解决方案。问题在于,并不是每个开发人员都应该在他的工作站上拥有所有这些项目。 - Jason
@Jason 我还是没明白。如果你的重构确实触及到每个项目,那么难道你最终不必把每个项目都放在你的电脑上以避免破坏构建吗? - JaredPar
常见项目是所有客户使用的基础应用程序。当客户想要定制或添加功能到我们的系统时,我们会创建一个依赖于基础应用程序的单独解决方案。并非每个开发人员都必须在每个解决方案上工作,因此他们将不得不从存储库获取整个代码库,以便能够从主解决方案进行重构。如果不是很清楚,很抱歉。这样是否更有意义? - Jason
@Jason,如果你进行了破坏性的更改,那么流程是什么?每个客户都必须手动同步和更正吗? - JaredPar
这是我试图通过这个问题解决的特定问题。我想我有一个比我想象的更大的问题。你能建议任何特定的做法来避免这种情况吗? - Jason
@Jason 我认为防止破坏性更改的最佳方法是在项目中为每个公共/共享程序集保留asmmeta文件,并在构建时进行差异比较。 Asmmeta是一种文本方式来表示程序集的公开API,因此在构建时进行差异比较将告诉您是否进行了任何公共API破坏性更改。 - JaredPar

2
我们有一个类似的场景,并且我们采用多种方法来解决它:
1)通过使用接口、重写方法或新方法(当现有方法不足以满足需求时)隔离客户特定的更改,从而确保核心应用程序框架与现有解决方案向后兼容。
2)在极少数情况下,必须将更改应用于所有解决方案时,我们有一个单一的主解决方案,可以用来更新所有项目。
3)持续集成:在每次提交时,自动构建每个解决方案,并将成功或失败的消息分发给所有开发人员,以便负责的人员可以修复任何破坏性更改。由于涉及到责任问题(每个人都知道是谁破坏了构建),对开发人员施加了相当大的(积极)压力,以确保他们不会成为问题的根源。
我们使用CruiseControl.Net和Subversion仓库,但我确定还有很多其他解决方案可与您的存储库一起使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接