【问题标题】:Refactoring shared code across multiple solutions跨多个解决方案重构共享代码
【发布时间】:2012-01-09 10:17:10
【问题描述】:

我有几个 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 将通用项目包含在自定义项目中?
  • 不,我不知道。开发人员必须手动签出项目,以免引用中断。我会看看 svn:external。

标签: .net visual-studio refactoring reference shared-libraries


【解决方案1】:

在 Visual Studio 中无法对当前未打开的项目应用特定重构。重构只会应用于在当前解决方案中打开的项目。

为了促进对大量解决方案的重构,最好的方法是简单地创建一个包含所有项目的主解决方案。对于一般用途,这可能有点笨拙和缓慢。但是对于大规模的重构,它可以节省很多项目。

我不太确定我理解你的意思

我必须检查并更新每个存储库才能执行此操作。

任何涉及您所有项目的重构最终都会迫使您更新所有项目。所以看起来你无论如何都需要这样做。我觉得我在这里错过了一些东西。

【讨论】:

  • 我将检查每个使用共享项目的单独存储库中的每个项目,以便能够使用主解决方案。并不是每个开发人员都应该在他的工作站上拥有所有项目。
  • @Jason 我还是不明白。如果您的重构真正涉及到每个项目,那么您最终是否必须将每个项目都放在您的机器上才能不破坏构建?
  • 通用项目是我们所有客户使用的基础应用程序。当客户想要为我们的系统定制或添加功能时,我们会根据基本应用程序创建一个单独的解决方案。并非每个开发人员都必须处理每个解决方案,因此他们必须从存储库中获取整个代码库才能从主解决方案中重构。抱歉,如果不是很清楚。它更有意义吗?
  • @Jason 如果您进行重大更改,那么流程是什么?是否每个客户都必须手动同步和更正?
  • 这是我试图用这个问题解决的特定问题。我想我有一个更大的问题需要解决。您能否建议任何特定的做法来避免这种情况?
【解决方案2】:

我们有与您类似的情况,我们采用多管齐下的方法来解决它:

1) 通过使用接口、重写方法或新方法(当现有方法不够用时)将客户特定的更改与核心应用程序隔离开来。

这可确保核心应用程序框架向后兼容现有解决方案。

2) 在必须将更改应用于所有解决方案的极少数情况下,我们有一个可用于更新所有项目的主解决方案。

3) 持续集成:在每次签入时,都会自动构建每个解决方案,并将成功或失败消息分发给所有开发人员,以便负责方可以修复任何重大更改。

由于涉及到问责制(每个人都知道是谁破坏了构建),开发人员面临着很大的(积极的)压力,以确保他们不是造成问题的人。

我们将 CruiseControl.Net 与 subversion 存储库一起使用,但我相信还有很多其他解决方案可以与您的存储库一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2017-06-02
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多