Resharper- 查找所有未使用的类

130

我知道如何通过右键单击文件并选择“查找用法”选项来查找单个文件的未使用引用。是否有任何方法可以查看或获取项目中所有未使用的类或文件列表?


2
我过去使用过ndepend来完成这个。 - Cine
2个回答

215

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

然后右键单击解决方案节点,选择“查找代码问题”。在“检查结果”工具窗口中,可以按“问题类型”分组,并查找“类型或类型成员从未被使用”以获取所有未使用的类(以及许多其他未使用的符号)。

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

检查结果窗口示例


41
"Type or type member is never used"在"符号声明中的冗余"下显示未使用的类/方法。不确定是由于版本更改还是我看待它的方式有所不同。 - bulltorious
4
在Windows 8上使用VS2013或在Windows 7上使用VS2012,使用Resharper 7.1未返回任何未使用的类别。 - Sam Jones
1
至少在 ReSharper 8 中,您不必启用“分析解决方案中的错误”即可获得结果。 - Pieter van Ginkel
3
Resharper 10:此报告未显示未使用的类。解决方法:在代码中找到一些未使用的类,然后进行“查找解决方案中的相似问题”。 - altumano
2
仍然在Resharper 2018.1中出现问题 :( 按照上述解决方法,但如果不能轻松找到未使用的类(或方法),则暂时创建一个并使用它执行“在解决方案中查找相似问题”。 - Ray
显示剩余2条评论

18

@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());
    }
}

如您所见,RegisterFromAssembly会遍历程序集中的所有类型,并根据方法参数在运行时将它们盲目地添加到容器中。

您需要使用像Agent Mulder这样的插件来提供已在容器中注册或解析的类型的导航。这可能在视觉上(设计时间可能)起作用,但除非每次删除未使用的类时都运行应用程序内的所有测试[每个可能的层],否则您不会真正确定。故事的道德:一个类对于Resharper可能听起来没有用,但当您使用依赖注入时,它可能会被复活。


3
不仅仅是 DI,对于任何使用反射的情况,这个解决方案可能会失败。 - Mohayemin

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