c# - 使用反射计算代码行数的简单方法

标签 c# .net reflection lines-of-code

我需要对 .net 程序集 (c#) 的代码行(无空白、无注释)进行(非常粗略的)估计。有没有一种简单的方法可以使用反射来做到这一点?

我更喜欢手写工具(所以我在这里询问指针......)但我也愿意使用免费(如语音)工具。

以下是我的用例:
我是一个团队的一员,在一个几乎没有代码覆盖率的不太大的项目中。我们有一份关于覆盖率的报告,其中说明了大约 60% 的覆盖率(在这里谈论单元测试。)但是该报告不显示根本没有单元测试的程序集。
因此,为了让报告接近正确,我想我写了一个小工具,可以在没有单元测试的情况下为每个程序集调用(我可以找到那些)并生成一个 xml,就像我们的覆盖工具生成的那样,说明没有任何内容被覆盖.作为“语句”的第一个近似值,我想我算的是“代码行数”。

最佳答案

您不能使用反射计算代码行数。使用反射无法获得此信息。使用反射,您可以获得类成员的签名,并且可以在这些方法中获取原始 IL。然而,您无法有效地将 IL 转换回代码行。

有几种方法可以做到这一点。您可以(ab)使用 Reflector 等工具并以编程方式调用其程序集以将您的程序集反编译回 C# 并进行一些行计数,或者您可以从 .pdb 文件中获取信息以获取行号。这些程序数据库文件包含所有这些信息。然而,无法使用反射读取 pdb。

NDepend(Gerrie 提到的工具)使用 .pdb 文件中的信息来计算行数。

但既然您已经在使用代码覆盖工具,为什么不为未覆盖的程序集添加空的单元测试项目并将这些测试项目添加到您的代码覆盖工具中。这样你就可以看到整个项目的总覆盖率。这比购买 NDepend 便宜,也比自己手写 LoC 计数器便宜得多。

关于c# - 使用反射计算代码行数的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5712839/

相关文章:

c# - 通过套接字动态调用方法

c# - 编辑文件元数据 - 代码在 VB 中可以,但在 C# 中不行

c# - 什么时候 stackoverflow 才公平合理?

c# - 如何在 ViewModel 中交换属性值?无法通过 ref

c# - 如何通过不带资源文件的 cmake 为 C# Windows 窗体应用程序设置图标?

c# mongo 2.0 减少 FindAsync 的流量

c# - 如何使启动窗体最初不可见或隐藏

c# - 处理异常 .NET MVC 保留表单数据

java - Kotlin 伴生对象和反射

c# - 本地时间明天午夜(根据夏令时调整)