c# - VS API 有助于在重构后自动修复代码中断的过程

标签 c# visual-studio-2008 api refactoring

<分区>

我发现自己无数次重新组织我们的解决方案(超过 72 个项目),以努力减少代码。很多时候它涉及提取通用类型/库并将它们四处移动。

它总是涉及一个重复的编译器错误,所以我不得不在很多不同的地方修复相同的编译器错误。我正在寻找 VS api 指南,以便我可以进行一些代码生成/自动修复。

即使您没有确切的解决方案,您能指出我应该看的地方吗?有编译器api吗?重构api?关于我如何做任何一个的任何建议?

用例:

那么第一个问题(两个中最简单的一个):

当我将文件从一个项目移动到另一个项目时自动修复。这个过程就是找错误

"The type or namespace name 'MovedClass' could not be found.

然后删除旧命名空间,添加新命名空间,并添加项目引用。

案例二...重构为模式。

例子:

原始基础 VO 类:

   public class BaseVO{
      public AuditInfo { get;set;}

   }
   public class BaseKey{

   }

我们所有的业务对象(每个都在单独的类中)。

   public class ExampleBusinessVO : BaseVO{
      public AuditInfo { get;set;}
      public ExampleBusinessKey BusinessKey { get;set;}
   }

   public class ExampleBusinessKey{


   }


现在假设我们要在 BaseVO 和 Base Key 之间添加一个显式链接,并强制所有实现 Equals/HashCode

新的基础 VO 类:

   public abstract class BaseVO<TKey>{
      TKey BusinessKey{get;set;}
      public abstract override bool Equals(object obj);          
      public abstract override int GetHashCode();

   }
   public class BaseKey{

   }

然后我必须将这些更改级联到所有 VO。 (哎哟)

   //Add generic
   public class ExampleBusinessVO : BaseVO<ExampleBusinessKey>{
       //Remove old business key  

        //Implement methods
       public override bool Equals(object obj){

       }
   }

   public class ExampleBusinessKey: BaseKey{


   }

现在我知道我无法修复所有的错误,但是如果能够编写一些东西来检查一个类的编译错误就更好了。然后我可以开发一个务实的解决方案:

对于每个VO如果报错:“使用泛型类型...需要1个类型参数”,然后读取类文件并找到实现BaseKey的类,然后将其添加到模板方法中。

请注意我寻找的是自动化解决方案而不是重构工具

最佳答案

就我个人而言,我会推荐ReSharper因为它为您可能需要的大部分重构工作提供了功能。

移动类型(甚至在项目之间)、重命名类型、提取方法、重新排序方法签名等...

这是一种付费解决方案,但物有所值(或您雇主的)。您可以从功能齐全的网站下载免费试用版以感受一下。

编辑:

好的,所以我刚刚对此进行了测试,ReSharper 将处理将一种类型移动到另一个项目所需的所有工作,但它不会自动为您添加引用。但是,它确实向您发出了需要新引用的公平警告,并且使用 ReSharper 添加这些引用非常简单:

Add Reference With Resharper

关于c# - VS API 有助于在重构后自动修复代码中断的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2691488/

相关文章:

c++ - 使用 WinCE7 平台构建器在 Visual Studio 2008 中为 WinCE7 在 Visual C++ 中创建 Winforms

api - Magento API 返回哪个时区的日期

c# - 为分布式事务处理协调器 (msdtc.exe) 添加防火墙规则

c++ - 首次插入静态 STL 集会导致未处理的异常 0xC0000005 : Access violation to be thrown

java - 在我的 Web 服务中使用大量私有(private)静态方法是不是不好的做法

c++ - 即使在设计器中更改高度后,组合框下拉菜单也不起作用

angularjs - 使用 Electron api 为现有 Angular 项目创建桌面应用程序

api - 浏览器 API key 不适用于引用程序

c# - 将 Nuget 包从一个项目添加到另一个项目

c# - 在匿名类型集合上使用 Contains()