如何计算Visual Studio解决方案中的代码行数?

是否有可能找到整个解决方案中的代码行数?我听说过MZ-Tools,但有开源等效物吗?

550325 次浏览

您可以使用:

VS2005、2003和2002的开源行计数器可在此处获得:

http://www.wndtabs.com/

还有关于创建行计数VS插件的讨论,完整的代码在Codeproject上,这里

http://www.codeproject.com/KB/macros/LineCounterAddin.aspx

Slick Edit Gadget也有一个不错的行计数器,在这里:

http://www.slickedit.com/products/slickedit

Microsoft Visual Studio Team System 2008包含一个很好的线路计数器。

但请记住:

通过代码行衡量编程进度就像通过重量衡量飞机制造进度一样。比尔·盖茨

在Visual Studio Team System 2008中,您可以从菜单Analyze-->“计算解决方案的代码指标”中执行操作,它会为您提供整个解决方案的行数(除其他外g

我发现PowerShell对此很有用。无论如何,我认为LoC是一个相当虚假的度量标准,所以我认为不应该需要任何更正式的东西。

从较小的解决方案目录中:

PS C:\Path> (gci -include *.cs,*.xaml -recurse | select-string .).Count8396PS C:\Path>

这将计算所有解决方案的. cs和. xaml文件中的非空行。对于更大的项目,我只是使用了不同的扩展名列表:

PS C:\Other> (gci -include *.cs,*.cpp,*.h,*.idl,*.asmx -recurse | select-string .).Count909402PS C:\Other>

当单个命令行可以做到时,为什么要使用整个应用程序?:)

cloc是一个优秀的命令行,基于Perl的Windows可执行文件,它将分解按文件格式分组的空行、注释行和源代码行。

现在它不会专门在VS解决方案文件上运行,但它可以递归遍历目录,并且您可以根据需要设置文件名过滤器。

以下是他们网页的示例输出:

prompt> cloc perl-5.10.0.tar.gz4076 text files.3883 unique files.1521 files ignored.
http://cloc.sourceforge.net v 1.07  T=10.0 s (251.0 files/s, 84566.5 lines/s)-------------------------------------------------------------------------------Language          files     blank   comment      code    scale   3rd gen. equiv-------------------------------------------------------------------------------Perl               2052    110356    112521    309778 x   4.00 =     1239112.00C                   135     18718     22862    140483 x   0.77 =      108171.91C/C++ Header        147      7650     12093     44042 x   1.00 =       44042.00Bourne Shell        116      3402      5789     36882 x   3.81 =      140520.42Lisp                  1       684      2242      7515 x   1.25 =        9393.75make                  7       498       473      2044 x   2.50 =        5110.00C++                  10       312       277      2000 x   1.51 =        3020.00XML                  26       231         0      1972 x   1.90 =        3746.80yacc                  2       128        97      1549 x   1.51 =        2338.99YAML                  2         2         0       489 x   0.90 =         440.10DOS Batch            11        85        50       322 x   0.63 =         202.86HTML                  1        19         2        98 x   1.90 =         186.20-------------------------------------------------------------------------------SUM:               2510    142085    156406    547174 x   2.84 =     1556285.03-------------------------------------------------------------------------------

第三代等效标度是对第三代语言中需要多少代码的粗略估计。不是很有用,但无论如何都很有趣。

其他简单工具对于VS2008(开源):http://www.accendo.sk/Download/SourceStat.zip

找到这个提示:使用VS查找和替换的LOC

不是一个插件,但如果这就是你正在寻找的。

一个简单的解决方案是在所有文件中搜索。使用通配符时输入“*”。这将匹配所有行。在查找结果窗口的末尾,您应该会看到一行排序:

Matching lines: 563 Matching files: 17 Total files searched: 17

当然,这对于大型项目不是很好,因为所有行都经过加工并加载到内存中,以便在查找结果窗口中显示。

参考:

我更喜欢OxyProject指标 VS Addin。

试试neptune er。除了LoC之外,它还为您提供空格、制表符、注释行等内容。http://neptuner.googlecode.com/files/neptuner_0_30_windows.zip

Visual Studio具有内置的代码指标,包括代码行:

分析→计算代码指标

您可以在Visual Studio 2010中使用项目行计数器加载项。通常它不适用于Visual Studio 2010,但它适用于此处的有用的. reg文件:http://www.onemanmmo.com/index.php?cmd=newsitem&;注释=news.

在Visual Studio 2010 Ultimate中使用菜单->分析->计算代码指标选项。

我想出了一个快速而脏的Powershell脚本来计算文件夹结构中的行。它不像其他答案中引用的其他一些工具那样功能齐全,但我认为它足以提供项目或解决方案中代码文件相对于彼此的大小的粗略比较。

脚本可以在这里找到:

我使用了Ctrl+Shift+F。接下来,在搜索框中放一个\n并启用正则表达式框。然后在查找结果中,屏幕末尾是搜索的文件数和找到的代码行数。

您可以使用[^\n\s]\r\n跳过空白和仅空格行(在注释中归功于Zach)。

同意阿里帕尔。WndTab行计数器插件就是这样的工具。http://www.codeproject.com/KB/macros/linecount.aspx

从下载站点搜索以找到一些相关工具也是一个好主意。http://www.cnet.com/1770-5_1-0.html?query=code+counter&; tag=srch

对于未来的读者,我想建议Visual Studio 2010的DPack扩展

它内置了大量实用程序,包括一个行计数器,它说明有多少行是空白的,代码等。

这里的答案有点过时,可能是从2008年开始的。因为在较新的Visual Studio版本2010/2012中,此功能已经内置。因此没有理由为其使用任何扩展或工具。

计算代码行数的功能-计算指标。有了它,你可以计算每个项目或解决方案的指标(LOC、维护指数、循环指数、继承深度)。

只需右键单击解决方案资源管理器中的解决方案或项目,

输入图片描述

并选择“计算指标”

输入图片描述

稍后用于分析和聚合的数据可以导入到Excel。同样在Excel中,您可以从指标中过滤掉生成的类或其他噪音。这些指标,包括代码行LOC,也可以在构建过程中收集,并包含在构建报告中

显然工具更容易,但我觉得在Powershell中这样做很酷:)

此脚本查找. sln文件中的所有. csproj引用,然后在每个csproj文件中定位包含用于编译的文件。对于包含用于编译的每个文件,它创建一个具有属性的对象:解决方案、项目、文件、行。它将所有这些对象存储在列表中,然后根据需要对数据进行分组和投影。

#path to the solution file e.g. "D:\Code\Test.sln"$slnFile = "D:\Code\Test.sln"

#results$results = @()
#iterate through .csproj references in solution fileforeach($projLines in get-item $slnFile | Get-Content | Select-String '".*csproj'){$projFile = [System.IO.Path]::Combine([System.IO.Path]::GetDirectoryName($slnFile), [regex]::Match($projLines,'[^"]*csproj').Value)$projFolder = [System.IO.Path]::GetDirectoryName($projFile)
#from csproj file: get lines for files to compile <Compile Include="..."/>$includeLines = get-item $projFile | Get-Content | Select-String '<Compile Include'

#count of all files lines in project$linesInProject = 0;foreach($fileLine in $includeLines){$includedFilePath = [System.IO.Path]::Combine($projFolder, [Regex]::Match($fileLine, '"(?<file>.*)"').Groups["file"].Value)$lineCountInFile = (Get-Content $includedFilePath).Count$results+=New-Object PSObject -Property @{ Solution=$slnFile ;Project=$projFile; File=$includedFilePath; Lines=$lineCountInFile }}}
#filter out any files we dont need$results = $results | ?{!($_.File -match "Designer")}

#print out:
"---------------lines per solution--------------"$results | group Solution | %{$_.Name + ": " + ($_.Group | Measure-Object Lines -Sum).Sum}"---------------lines per peoject--------------"$results | group Project | %{$_.Name + ": " + ($_.Group | Measure-Object Lines -Sum).Sum}

这是技巧…它也计算Js文件。

正则表达式在VS2010和2012之间发生了变化,因此这里的大多数正则表达式解决方案不再有效

(^(?!(\s*//.+)))+(^(?!(#.+)))+(^(?!(\s*\{.+)))+(^(?!(\s*\}.+)))+(^(?!(\s*\r?$)))+

将找到所有不是空白的行,不仅仅是一个括号 ( '{' 或 '}' ) ,而不仅仅是一个#包含或其他预处理器。

使用Ctrl-转变-f并确保正则表达式已启用。

VS 2010及更早版本的相应正则表达式是

^~(:Wh@//.+)~(:Wh@\{:Wh@)~(:Wh@\}:Wh@)~(:Wh@/#).+

以下是Visual Studio 2012/2013/2015的更新,适用于那些想要执行“查找”选项(我发现这是最简单的)的人:此RegEx将查找所有带有多个排除项的非空行,以提供最准确的结果。

在“查找”框中输入以下正则表达式。请确保选择“使用正则表达式”选项。根据您的需要将搜索选项更改为“当前项目”或“整个解决方案”。现在选择“全部查找”。在查找结果窗口的底部,您将看到“匹配行”,这是代码行数。


^(?!(\s*\*))(?!(\s*\-\-\>))(?!(\s*\<\!\-\-))(?!(\s*\n))(?!(\s*\*\/))(?!(\s*\/\*))(?!(\s*\/\/\/))(?!(\s*\/\/))(?!(\s*\}))(?!(\s*\{))(?!(\s(using))).*$

此RegEx不包括以下项目:


评论

// This is a comment

多行注释(假设每行前面都有*正确注释)

/* I am a* multi-line* comment */

用于智能感知的XML

/// <summary>/// I'm a class description for Intellisense/// </summary>

超文本标记语言:

<!-- I am a HTML Comment -->

使用语句:

using System;using System.Web;

打开花括号:

{

关闭花括号:

}

注意:大括号之间的任何内容都将包含在搜索中,但在这个例子中,只有4行代码会被计算在内,而不是18个实际的非空行:

        public class Test{/// <summary>/// Do Stuff/// </summary>public Test(){TestMe();}public void TestMe(){//Do Stuff Here/* And* Do* Stuff* Here */}}

我创建这个是为了给我一个比以前的一些选项更准确的LOC计数,并想我会分享。老板们喜欢LOC计数,所以我坚持了一段时间。我希望其他人能发现这有帮助,如果你有任何问题或需要帮助使其工作,请告诉我。

您可以使用免费工具监控对象

给出了很多措施:代码行数、语句数、复杂性、块深度

通过图表具有图形输出

您可以使用Visual Studio代码指标PowerTool 10.0。它是一个命令行实用程序,可为您计算托管代码(包括代码行)的一些指标。您可以获得将该工具引入Visual Studio的VS 2010插件,并使其与选择菜单项并单击“分析解决方案”一样快。

在Visual Studio 2015中,转到分析菜单并选择“计算代码指标”。

在Visual Studio 2019中,您需要从顶部菜单中选择:

'Analyze' -> 'Calculate Code Metrics' -> 'For Solution'

这适用于Visual Studio 2019专业版和企业版。