【问题标题】:Identifying unused classes / controls / pages识别未使用的类/控件/页面
【发布时间】:2012-05-03 04:57:30
【问题描述】:

我们有一个已有 10 多年历史的 ASP.NET 网站项目,其中包含许多未使用/遗留的用户控件和页面。

是否有工具可以帮助识别解决方案中的这些元素,以便我们将它们重构出来?

我知道这个问题很复杂,因为并非所有类型都被引用为编译器/工具可能识别的类型。例如通过反射实例化的对象使用表示类名的字符串进行实例化。此外,asp.net 页面一般不作为类型引用,而是作为标记中的页面标识符字符串。

似乎仍然有人会创建一个工具来处理这些情况并创建未使用的类/页面/用户控件的候选列表

【问题讨论】:

  • 如何使用 resharper 它也会在 .cs 页面中找到未使用的方法...
  • Resharper 擅长查找未使用的方法,但不擅长识别未使用的页面和控件。

标签: c# asp.net refactoring


【解决方案1】:

您可以使用此正则表达式查找未使用的注册控件

<%@\s*Register\s+TagPrefix\s*=\s*"(?<tagprefix>[^"]+)"\s+TagName\s*=\s*"(?<tagname>[^"]+)"\s+Src\s*=\s*"[^"]+"\s*%>(?!.*?\k<tagprefix>:\k<tagname>\s+)

我使用powergrep 来运行这个正则表达式。 应该启用“点匹配换行符”复选框才能正常工作。

【讨论】:

  • 看起来很有趣。你能描述一下它的作用吗?
  • 当然。第一部分查找控件注册模板 并收集命名组中的 tagprefix tagname (?blabla >)。正则表达式的第二部分使用了负前瞻 (?!blabla) 所以我们可以把这个正则表达式读作:请找出文中后面没有用到的所有控件注册。我们的项目也有 10 多年的历史了 :)
  • 我使用 SublimeText 来执行这个。我必须在正则表达式的开头添加一个内联标志来点匹配换行符:(?s)。见stackoverflow.com/questions/11992596/…
【解决方案2】:

ReSharper 是一种重构工具,可以帮助您识别未使用的类和方法的云。它还可以安全地删除它们。它允许您删除方法或类并调整其所有用法。见:Safe delete

它也有适当的 ASP.NET 支持。见:ASP.NET support

【讨论】:

  • 谢谢 - 我们已经在使用 Resharper,但我认为它无法识别未使用的页面和用户控件。
  • 您是否尝试过find usages 功能。我相信您至少可以使用它找到未使用的用户控件。
  • 是的 - 这对于单独的命名空间、方法和类型来说是可以的,但我希望找到一个可以生成解决方案范围报告的工具
  • 好的。您也可以使用 Resharper 进行操作,请参阅 Q&A Find unused code
猜你喜欢
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
相关资源
最近更新 更多