【问题标题】:C# Attribute to detect unused methods用于检测未使用方法的 C# 属性
【发布时间】:2017-07-01 12:46:32
【问题描述】:

是否可以编写一个 Attribute 来跟踪方法以检测这些方法是否从未被调用?

[Track]
void MyMethod(){

}

输出:

warning: method "MyMethod" in "MyClass" has no references in code.

在编译时运行它并不是绝对必要的,但它应该在应用程序初始化时工作(无论如何在编译时更好)。

这个标签会被放到音频库的track methods中,因为音频被非常频繁地重构,我们通常在代码中搜索有0个引用的音频方法,我们想要标记这些方法以便我们检测快速删除未使用的音频资产。

基本上每次我们添加新的音效后,我们可能以后不再触发它(调用它的方法),音频文件/播放代码可以在应用程序中保留很长时间。

【问题讨论】:

  • 您可以使用代码分析工具来查找未使用的方法,其优点是不会更改您的代码 (msdn.microsoft.com/en-us/library/3z0aeatx.aspx)
  • 一个只能在特定类上运行的免费代码分析工具? (反正代码分析工具应该手动触发,我们希望自动输出警告)
  • @Everts 实际上我们通过调用“查找所有引用”来控制每个方法,但这是一项繁琐的手动任务,我们希望自动化 :) 谢谢。
  • @DarioOO 您可以配置您的项目,以便在每次构建后触发代码分析
  • @vc74 很好,如果您可以使用免费的分析工具展示如何做到这一点,该工具将被接受为答案,因为它可以解决我们的问题 :) (unity3D 生成的项目文件是否保留任何已完成的自定义配置到项目文件?)

标签: c# reflection custom-attributes


【解决方案1】:

有点晚了,但总比没有好:我使用 Gnu 的 WinGrep 在所有文件夹和文件中搜索方法名称:

`C:\>grep -irw "method_name" * --include=*.cs --include=*.sql --include=*.txt`

您可以包含对您有意义的尽可能多或尽可能少的文件扩展名。在上面的示例中,我将顶级目录显示为 C:,但您可以从任何有意义的目录开始搜索。

与基于 IDE 的搜索相比,使用 grep 的巨大优势在于它可以搜索多个项目和解决方案。

【讨论】:

    【解决方案2】:

    在这里可以找到部分答案:

    C# reflection and finding all references

    我可以使用该信息来获取对标有特定属性的方法的引用,但这是一个运行时脚本(但总比没有好)。

    【讨论】:

      【解决方案3】:

      也许这就是您正在寻找的答案?

      Finding all references to a method with Roslyn

      你可以使用那里的代码来自动化你自己的东西,我想说的是反射

      【讨论】:

      • 不确定这是否适用于 Unity,我会尝试谢谢! :)
      • 好吧,你总是可以使用正则表达式来做这种性质的事情,但它会变得更重:(
      • 无论如何通过简单的反射是不可能的?
      • 我不这么认为,你最好使用像ReSharper 这样的插件,它会在编译时为你做到这一点
      猜你喜欢
      • 2010-09-28
      • 2019-10-23
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2014-09-04
      • 2021-10-25
      • 1970-01-01
      • 2010-10-27
      相关资源
      最近更新 更多