【问题标题】:Lines-of-code counting for many C# solutions许多 C# 解决方案的代码行计数
【发布时间】:2010-05-05 12:16:12
【问题描述】:

我目前正在研究一种在 C# 中计算代码行数的解决方案。

我非常需要以下两个工具的组合:
http://richnewman.wordpress.com/2007/07/01/c-and-vbnet-line-count-utility/
http://www.locmetrics.com/index.html

我的问题是我需要递归扫描一个包含很多 Visual Studio 解决方案的文件夹。因此,如果不对其代码进行任何重大工作,就不能真正使用第一个工具,因为它一次只能扫描一个解决方案。
但我还需要拆分每个解决方案的结果,最好是包含的项目。这使我发现的第二个工具不合格。我还发现 NDepend 也有同样的问题。

你知道有什么免费工具可以满足我的需要吗?我找不到合适的。

【问题讨论】:

  • 工具能够排除 cmets 也很重要。甚至可能是自动生成的代码。抱歉忘记了(可以编辑原始问题,因为 Kobi 已经修复了超链接 ;-))
  • “用代码行衡量编程进度就像用重量衡量飞机制造进度。” - 比尔盖茨
  • 我不确定这些数字的用途。目前,它们只是一次性快照。可能是为了了解所有项目的规模。我只是被要求找出答案的实习生:-)
  • 您可以根据部分文件名或位置排除自动生成的文件,但不一定能识别所有自动生成的代码。
  • 排除自动生成的代码只是一个优点,并不是真正的要求。但我被特别要求排除 cmets。

标签: c# file count lines-of-code


【解决方案1】:

NDepend 是一款出色的工具,专为衡量和可视化代码指标和复杂性而设计。

Powershell 会这样做:

(dir -Include *.cs -Recurse | select-string .).Count

Counting Lines of Source Code in PowerShell:

每条路径的行数:

   gci . *.cs -Recurse | select-string . | Group Path

最小值/最大值/平均值:

   gci . *.cs -Recurse | select-string . | Group Filename | Measure-Object Count -Min -Max -Average

评论比例:

   $items = gci . *.cs -rec; ($items | select-string "//").Count / ($items | select-string .).Count


## Count the number of lines in all C# files in (and below) 
## the current directory. 

function CountLines($directory) 
{ 
    $pattern = "*.cs" 
    $directories = [System.IO.Directory]::GetDirectories($directory) 
    $files = [System.IO.Directory]::GetFiles($directory, $pattern) 

    $lineCount = 0 

    foreach($file in $files) 
    { 
        $lineCount += [System.IO.File]::ReadAllText($file).Split("`n").Count 
    } 

    foreach($subdirectory in $directories) 
    { 
        $lineCount += CountLines $subdirectory 
    } 

    $lineCount 
} 

CountLines (Get-Location) 

另外,Line Counter

【讨论】:

  • 不幸的是,这会计算所有文本行,我对实际代码行更感兴趣,例如不包括 cmets,甚至可能是自动生成的代码。
  • @Eric - 如果您不计算 cmets 和自动生成的代码,您的工作效率将会大幅下降。 :-)
  • 难道你不能结合使用这种方法来查找所有 .sln 文件,然后将它们分别输入你提到的第一个工具中吗?
  • @nc97217 当然我可以想出我自己的实现,只是希望这已经完成了
  • 据我所知,NDepend 一次也只能处理一个解决方案/程序集。但我需要一次扫描完整的存储库。
【解决方案2】:

我认为LOCcode 是一个有趣的免费工具,用于计算代码行数。它允许选择必须处理的文件。它在所有启用的任务中计算 LOC。

不幸的是,LOCCode的开发似乎已经结束了。

【讨论】:

  • 太糟糕了,它计算 XMLs >.
  • 链接已失效,Wayback Machine 无能为力。 :(
【解决方案3】:

您需要的是此处定义的逻辑代码行数: How do you count your number of Lines Of Code (LOC)

如果您使用 NDepend 来计算 lines of code 的数量,您仍然可以将所有 VS sln 附加到 NDepend 项目中。但是,逻辑代码行是从 PDB 文件推断的指标,因此请确保所有程序集都关联了相应的 PDB 文件。

您也可能感兴趣:Why is it useful to count the number of Lines Of Code (LOC) ?

【讨论】:

    【解决方案4】:

    我喜欢 Mitch Wheat 所说的,但我不喜欢一些无用的信息被计算为“代码行”。我编写了一个 C# 代码来查找代码中 REAL 行的总数: http://rajputyh.blogspot.in/2014/02/counting-number-of-real-lines-in-your-c.html

    您需要使用该代码构建一个小型实用程序,以提供保存所有“*.cs”文件的根文件夹的路径。该代码的好处是它不依赖于项目文件。我通常检查我的代码并删除自动生成的文件并使用该工具来计算行数。

    【讨论】:

      【解决方案5】:

      最后我选择了LocMetrics,不幸的是这并没有真正解决我的每个解决方案的问题。

      但是存储库的文件夹结构可以很好地映射到解决方案,所以我决定使用上面的工具。

      感谢大家的帮助

      【讨论】:

      • 你为什么不赞成这个答案?我应该做些不同的事情吗?
      猜你喜欢
      • 2010-11-17
      • 2011-04-25
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      相关资源
      最近更新 更多