【问题标题】:Resharper- Find all unused classesResharper - 查找所有未使用的类
【发布时间】:2011-01-10 11:09:32
【问题描述】:

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

【问题讨论】:

  • 我过去曾为此使用过 ndepend。

标签: c# resharper


【解决方案1】:

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

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

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

【讨论】:

  • 未使用的类/方法出现在“符号声明中的冗余”下的“从未使用类型或类型成员”下。不确定这是由于版本更改,还是我的看法不同。
  • 这没有返回任何使用 Resharper 7.1 on VS2013 on Windows 8 或 VS2012 on Windows 7 的任何类别下的任何未使用的类。
  • 至少在 ReSharper 8 中,您不必启用“分析解决方案中的错误”即可获得结果。
  • Resharper 10:此报告不显示未使用的类。解决方法:在代码中找到一些未使用的类,然后执行“Find similar issues in solution”
  • 在 Resharper 2018.1 中仍然存在问题 :( 遵循上述解决方法,但如果无法轻松找到未使用的类(或方法),则暂时创建一个然后执行 “在解决方案中查找类似问题” 使用它
【解决方案2】:

@ulrichc 的解决方案听起来很完美,适用于中小型项目,在这些项目中您没有使用任何 Dependency Injection 框架,例如 Castle 或 Ninject,但是如果您使用 DI 容器 [例如城堡] 并且您有类似以下内容:

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 的插件,它为您的容器内注册或解析的类型提供导航。这再次可能在视觉上 [设计时可能] 起作用,但您并不能真正确定,除非每次删除未使用的类时,您都会在应用程序 [每个可能的层] 中运行所有测试以 80% 确定您是安全的。故事的寓意:一个类对 Resharper 来说可能听起来不熟悉,但当你使用依赖注入时它可能会复活。

【讨论】:

  • 不只是 DI,任何使用反射的解决方案都可能失败。
猜你喜欢
  • 2014-04-14
  • 2010-10-09
  • 2014-05-06
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 2016-03-29
  • 1970-01-01
相关资源
最近更新 更多