如何在 C# 中获取 identifier/method 的长度?
How to get the length of a identifier/method in C#?
我正在尝试获取在ASP.NET Core 2.2 中创建的项目的所有标识符和方法的长度,以便分析作业的代码指标,但我没有找到任何提供该指标的一种工具。
到目前为止,我使用了 Visual Studio 2019 年的代码指标,我得到了下一个指标:
- 可维护性指数
- 圈复杂度
- 继承的深度
- Class耦合
- 代码行数
我想知道是否有任何工具可以提供我正在寻找的指标。
使用反射API,你可以用Assembly.GetTypes()
获取程序集中的所有类型。
对于每种类型,您可以使用 Type.GetMethods()
获得所有方法。
对于每种方法,您都可以获得 MethodBody
和 MethodInfo.GetMethodBody()
。
然后您可以在每个 MethodBody
上调用 GetILAsByteArray()
以获取字节数组形式的 IL。
这是原始字节码,但您可以使用该字节数组的长度作为度量标准。
如果您想将代码作为 C# 进行分析,则需要使用 Reflector 之类的工具将其从 IL 反汇编。
您可以使用工具 NDepend to compute the identifierLength
metric. NDepend also supports many more code metrics。
例如你可以这样写C# LINQ code query。您可以下载可下载的全功能试用版。
from m in Application.Methods
select new { m, identifierLength = m.SimpleName.Length }
免责声明:我为 NDepend
工作
我正在尝试获取在ASP.NET Core 2.2 中创建的项目的所有标识符和方法的长度,以便分析作业的代码指标,但我没有找到任何提供该指标的一种工具。
到目前为止,我使用了 Visual Studio 2019 年的代码指标,我得到了下一个指标:
- 可维护性指数
- 圈复杂度
- 继承的深度
- Class耦合
- 代码行数
我想知道是否有任何工具可以提供我正在寻找的指标。
使用反射API,你可以用Assembly.GetTypes()
获取程序集中的所有类型。
对于每种类型,您可以使用 Type.GetMethods()
获得所有方法。
对于每种方法,您都可以获得 MethodBody
和 MethodInfo.GetMethodBody()
。
然后您可以在每个 MethodBody
上调用 GetILAsByteArray()
以获取字节数组形式的 IL。
这是原始字节码,但您可以使用该字节数组的长度作为度量标准。
如果您想将代码作为 C# 进行分析,则需要使用 Reflector 之类的工具将其从 IL 反汇编。
您可以使用工具 NDepend to compute the identifierLength
metric. NDepend also supports many more code metrics。
例如你可以这样写C# LINQ code query。您可以下载可下载的全功能试用版。
from m in Application.Methods
select new { m, identifierLength = m.SimpleName.Length }
免责声明:我为 NDepend
工作