Resharper-查找所有未使用的类

Roc*_*ngh 118 c# resharper

我知道如何通过右键单击文件并选择"查找用法"选项来查找单个文件的未使用引用.有什么办法可以查看或获取项目中所有未使用的类或文件的列表吗?

ulr*_*chb 190

首先启用"在解决方案中分析错误"(右键单击状态栏中的Resharper图标).

然后右键单击解决方案节点并选择"查找代码问题".在"检查结果"工具窗口中,您可以按"问题类型"进行分组,并查找"从不使用类型或类型成员"来获取所有未使用的类(以及更多未使用的符号).

第二个选项(在启用"分析解决方案中的错误"之后)是转到任何未使用的类,按Alt + Enter,选择"选项'类型或键入成员...'检查"| 查找此类型的所有代码问题 整个解决方案

检验结果窗口样本

  • 未使用的类/方法将出现在"符号声明中的冗余"下的"类型或类型成员永远不会被使用"下.不确定这是否是由于版本更改,或者我的看法不同. (41认同)
  • 在Windows 8的VS2013或Windows 7的VS2012上,使用Resharper 7.1在任何类别下都没有返回任何未使用的类. (4认同)
  • Resharper 10:此报告未显示未使用的类.解决方法:在代码中找到一些未使用的类,并执行"在解决方案中查找类似问题" (3认同)
  • 在 Resharper 2018.1 中仍然出现问题:( 请遵循上述解决方法,但如果无法轻松找到未使用的类(或方法),则临时创建一个,然后使用它_“在解决方案中查找类似问题”_ (2认同)

MHO*_*OOS 17

@ulrichc的解决方案听起来很完美,适用于小型到中型项目,在这些项目中你没有使用任何依赖注入框架,比如Castle或Ninject,但如果你使用的是DI容器[例如Castle],你会遇到以下情况:

public class IoC
{
    private WindsorContainer _container;

    private IoC()
    {
         _container = new WindsorContainer();
    }

    public static void RegisterFromAssembly(Assembly assembly, string classEndsWith, LifeTime lifeTime)
    {
        var lifestyle = ConvertLifeStyleType(lifeTime);

        _container.Register(AllTypes.FromAssembly(assembly)
                  .Where(type => type.Name.EndsWith(classEndsWith))
                  .WithService.AllInterfaces()
                  .Configure(c => c.LifeStyle.Is(lifestyle))
                  .WithService.FirstInterface());
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,RegisterFromAssembly遍历程序集内的所有类型,并且[基于methods参数]在运行时将它们添加到容器中.

您将需要一些代理Mulder插件,它为在容器内注册或解析的类型提供导航.这可能在视觉上[设计时间可能]工作,但你不会真正确定,除非你每次删除未使用的类,你运行应用程序内的所有测试[每个可能的层] 80%确定你是安全的.故事的道德:一个类可能听起来没有使用Resharper,但是当你使用依赖注入时它可能会被复活.

  • 不仅仅是DI,对于解决方案可能失败的任何反射使用. (3认同)