大规模重构C#代码

3

我希望能够同时重构500个项目。

我大约有20个解决方案,但没有一个包含所有内容的主解决方案,因为我还没有找到自动生成它的方法。

有什么建议吗?

谢谢。

编辑

我尝试使用来自codeplex的slnTools生成解决方案,结果Visual Studio几乎使整个操作系统崩溃。不确定是解决方案未正确生成还是Windows/Visual Studio的限制。


玩得开心。我很想知道怎么做那个。 - Steven Evers
你能更具体地说明“拆除整个操作系统”的意思吗?是蓝屏还是内存不足?我可以从使用ReSharper的经验中保证,如果可以处理500个项目,将需要大量的内存。希望你正在运行8GB或更多内存的64位操作系统。 - John Saunders
我将获取屏幕截图以展示其外观。我的机器是32位的,内存为4GB。基本上看起来像是系统内存不足,对话框和字体开始变得像糟糕的Windows 3.1。 - Ryu
5个回答

3
为了创建这个庞大的解决方案,您应该能够从类似以下宏的模糊开始:
    Dim d As New System.IO.DirectoryInfo(System.IO.Directory.GetCurrentDirectory())
    For Each f As System.IO.FileInfo In d.GetFiles("*.*proj")
        DTE.Solution.AddFromFile(f.FullName)
    Next
    DTE.Solution.Close(True)

在你开始进行大规模重构之前,我建议你使用像NDepend这样的工具来分析代码的依赖结构,并将其与你对重构的目标进行比较。您只需要在内存中保存受特定重构影响的项目即可。如果您可以限制所需的集合,那么您将获得很大的好处。
如果您无法将它们全部加载到内存中,您仍然应该能够分区 - 您只需要重复执行此操作。考虑一种情况,您有一个被十个其他项目使用的单个类库,并且您希望重构公共接口。
  1. 保存类库的副本
  2. 加载Project 1和类库,并进行重构。关闭解决方案。
  3. 从保存的副本中恢复类库。
  4. 加载Project 2和类库,并再次进行重构。关闭解决方案。
等等。最后,保留修改后的类库副本。如果您确实重复了重构,则所有十个项目都应该是满意的。
我还建议您利用这个机会向灵活性方向进行重构,这样您就不需要再次进行重构。通过接口或外观类访问类库可以使您免受公共接口更改的影响。

1

你想要重构什么?ReSharper 可能是最为知名的大规模重构工具... 但它是否适合取决于你想做什么。

你可以下载试用版并试一试...


1
ReSharper非常棒,但它会占用一些内存。我不会一开始就尝试使用500个项目 - 我会从25个开始,并逐步增加,看看它的处理能力如何。 - Joe White
是的...但是500个项目/20个解决方案...每次会有25个项目,所以我认为我们达成了一致。 - Marc Gravell
说它(或者说Visual Studio)占用了有点多的内存,就像说我使用stackoverflow有点太频繁一样。;-p - Marc Gravell

1

如果它们都共享相同的业务/数据域库,您可以重构它,然后更新项目中的引用。

更有可能的是,您想从这些分布式项目中创建业务/数据域。我不知道细节,但我愿意打赌,将20个解决方案组合在一起不会帮助您重构出通用代码。

  1. 我会从小处开始,创建一个新的解决方案,其中包含您的常见应用程序部分。
  2. 将常见代码的明显部分放入该解决方案中,并在其他项目中引用其已编译的dll。
  3. 检查您的项目并重复此过程,直到您拥有类似于您要查找的结构的东西。

我同意。工具在重构方面只能帮助你到一定程度。我不知道是否有任何工具可以找到多个项目中共同的方法和行为,并将其外包到单独的库中。即使有,我也不会相信它可以组织这些信息,让代码更易读。为了使代码易于人类理解,你真正需要的是人类自己阅读并整理代码。 - Samir Talwar

0

你可能会更好地处理少量项目,每个项目包含更多的文件。编写一个C#程序来创建一个包含所有源文件的项目文件并不难。

然后Visual Studio可能能够处理它...


0

我认为目前还没有什么方法可以满足您的需求。

您可以尝试使用slnTools来操作sln文件,并将它们合并成一个.sln文件。

但是我不确定Visual Studio是否能够很好地处理500个打开的项目。


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