我正在使用带有Resharper 5.1的VS2010。

我有两个项目,一个库项目(Lib)和一个应用程序项目(App),应用程序引用Lib。

Lib包含在App和Lib中都使用的X类。在App中,我现在想用类Y替换X的所有用法。在我的情况下,Y与X无关,但是如果可以简化重构,它可以从X继承。

我当前的计划是使用“查找用法”功能,按项目分组并逐一更改用法。有没有更简单/自动的方式来做到这一点?

最佳答案

Structural Search and Replace是您的 friend 在这里。您可以通过ReSharper | Find | Search with Pattern...来实现。

  • 定义X类型的占位符,将其命名为TX
  • 使您的查找模式$TX$
  • 指定为“查找”“项目”
  • 作为检查,请执行搜索-您应该看到X的所有用法
  • 单击“替换”切换按钮
  • 使替换模式成为Y的完全限定名称
  • 单击替换

  • ReSharper将向您显示所有要替换的X的内容-确保选中树顶部的复选框,然后单击“替换”。

    编辑

    确实是通过在我们的“查找”模式中使用类型占位符来确保仅重命名对X类型的引用,而不是对任何其他名称为X的引用进行重命名。

    如果您想结束
    using A.B.C;
    
    /* later */
    Y obObject = ...
    

    而不是
    A.B.C.Y myObject
    

    我认为您可以通过以下方式实现这一目标:
  • ReSharper | OptionsTools | Code Cleanup中,定义一个新的配置文件,该配置文件仅通过“优化'using'指令”进行检查
  • ReSharper | Options中,Languages | C# | Namespace ImportsA.B.C添加到“应始终导入的命名空间中”
  • 使用您刚定义的配置文件运行ReSharper | Tools | Cleanup Code
  • 通过从您将其添加到
  • 的命名空间列表中删除A.B.C来整理

    尽管这也会清除所有其他using,这可能会使版本控件的diff比您想要的大一点。

    09-11 19:21
    查看更多