C# VSAPI,以促进重构后自动修复代码中断的过程

C# VSAPI,以促进重构后自动修复代码中断的过程,c#,visual-studio-2008,api,refactoring,C#,Visual Studio 2008,Api,Refactoring,我发现自己无数次地重新组织我们的解决方案(72多个项目),努力减少代码。很多时候,它涉及到提取常见类型/库并将它们四处移动 它总是涉及一个重复的编译器错误,所以我必须在很多不同的地方修复相同的编译器错误。我正在寻找VS api的指南,以便我可以进行一些代码生成/自动修复 即使你没有确切的答案,你能告诉我应该去哪里吗?有编译器api吗?重构api?对我如何做这两件事有什么建议吗 用例: 所以第一个问题(两个问题中最简单的一个): 当我将文件从一个项目移动到另一个项目时自动修复。此过程将用于查找错误

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

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

即使你没有确切的答案,你能告诉我应该去哪里吗?有编译器api吗?重构api?对我如何做这两件事有什么建议吗

用例:

所以第一个问题(两个问题中最简单的一个):

当我将文件从一个项目移动到另一个项目时自动修复。此过程将用于查找错误

找不到类型或命名空间名称“MovedClass”

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

案例二……重构为一种模式

例如:

原始基本VO类:

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

   }
   public class BaseKey{

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

   }
   public class BaseKey{

   }

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



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

新的基本VO类:

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

   }
   public class BaseKey{

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

   }
   public class BaseKey{

   }
公共抽象类BaseVO{
TKey BusinessKey{get;set;}
公共抽象覆盖bool Equals(objectobj);
公共抽象重写int-GetHashCode();
}
公共类基密钥{
}

那么,我必须将这些更改级联到所有VO。(哎哟)

//添加泛型
公共类示例BusinessVO:BaseVO{
//删除旧的业务密钥
//实施方法
公共覆盖布尔等于(对象对象对象){
}
}
公共类示例BusinessKey:BaseKey{
}
现在我认识到我不能修复所有的错误,但是如果能够编写一些东西来检查类的编译错误,那就太好了。然后我可以开发一个实用的解决方案:

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


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

我个人建议,因为它为您可能需要的大多数重构工作提供了功能

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

这是一个付费的解决方案,但非常值得你(或你的雇主)的钱。你可以从网站下载一个功能齐全的免费试用版来体验它

编辑:

好的,我刚刚测试了这个,ReSharper将负责将一种类型移动到另一个项目所需的所有工作,但它不会自动为您添加引用。但是,它确实会给您一个公平的警告,即需要新的引用,使用ReSharper添加这些引用非常简单:


因此,如果我将一个类型从一个项目移动到另一个项目,它将查找并添加对新项目的引用?我不经常这样做,但我会假设是的。我这么说是因为ReSharper足够聪明,可以让您选择添加对第一次使用它时未被引用的类型的引用。因此,如果我在项目a中,请使用如果我必须点击所有文件并添加引用,那么ReSharper会说“嘿,你想添加对项目B的引用吗?”这仍然是一件痛苦的事情。ReSharper很重,而且它不会自动执行任何操作。我希望能够写些东西来处理重构。