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

How do you count the lines of code in a Visual Studio solution?

是否可以在整个解决方案中找到代码行数? 我听说过MZ-Tools,但是有没有开源的?


我发现powershell对此很有用。我认为LoC无论如何都是一个非常虚假的指标,所以我不相信任何更正式的要求。

从一个小的解决方案的目录:

1
2
3
PS C:\Path> (gci -include *.cs,*.xaml -recurse | select-string .).Count
8396
PS C:\Path>

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

1
2
3
PS C:\Other> (gci -include *.cs,*.cpp,*.h,*.idl,*.asmx -recurse | select-string .).Count
909402
PS C:\Other>

为什么在单个命令行执行时会使用整个应用程序? :)


Visual Studio 2010 Ultimate具有此内置功能。

分析 - >计算代码度量标准


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


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

http://www.wndtabs.com/

此处还讨论了创建一个计算VS插件的行,在Codeproject上完成代码

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

另外Slick Edit Gadgets有一个很好的行计数器,这里:

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

和Microsoft Visual Studio Team System 2008包括一个良好的行计数器。

请记住:

Measuring programming progress by lines of code is like measuring aircraft building progress by weight.
Bill Gates


发现这个提示:
LOC与VS查找和替换

不是插件,如果这就是你要找的东西。


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

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

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

此RegEx不包括以下项目:

评论

1
// This is a comment

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

1
2
3
/* I am a
* multi-line
* comment */

用于智能感知的XML

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

HTML评论:

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

使用陈述:

1
2
using System;
using System.Web;

打开花括号:

1
{

闭合花括号:

1
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        public class Test
        {
            /// <summary>
            /// Do Stuff
            /// </summary>
            public Test()
            {
                TestMe();
            }
            public void TestMe()
            {
                //Do Stuff Here
                /* And
                 * Do
                 * Stuff
                 * Here */
            }
        }

我创建了这个以给我一个比以前的选项更准确的LOC计数,并认为我会分享。老板喜欢LOC计数,所以我坚持了一段时间。我希望其他人可以找到这个有用的,如果您有任何问题或需要帮助让它工作,请告诉我。


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

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

以下是其网页的示例输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
prompt> cloc perl-5.10.0.tar.gz
    4076 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.00
C                   135     18718     22862    140483 x   0.77 =      108171.91
C/C++ Header        147      7650     12093     44042 x   1.00 =       44042.00
Bourne Shell        116      3402      5789     36882 x   3.81 =      140520.42
Lisp                  1       684      2242      7515 x   1.25 =        9393.75
make                  7       498       473      2044 x   2.50 =        5110.00
C++                  10       312       277      2000 x   1.51 =        3020.00
XML                  26       231         0      1972 x   1.90 =        3746.80
yacc                  2       128        97      1549 x   1.51 =        2338.99
YAML                  2         2         0       489 x   0.90 =         440.10
DOS Batch            11        85        50       322 x   0.63 =         202.86
HTML                  1        19         2        98 x   1.90 =         186.20
-------------------------------------------------------------------------------
SUM:               2510    142085    156406    547174 x   2.84 =     1556285.03
-------------------------------------------------------------------------------

第三代等效量表是对第三代语言所需代码量的粗略估计。不是非常有用,但无论如何都很有趣。


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

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

在解决方案资源管理器中右键单击解决方案或项目

enter image description here

并选择"计算指标"

enter image description here

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


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

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

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

使用Ctrl-shift-f并确保启用正则表达式。

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

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


在Visual Studio Team System 2008中,您可以从菜单Analyze - >'Calculate Code Metrics for Solution'中进行操作,它将为您提供整个解决方案的行数(除其他外g)


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

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


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

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

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

参考:

  • 高级示例

你可以使用:

  • SCLOCCount http://www.dwheeler.com/sloccount/-开源
  • loc metrics,http://www.locmetrics.com/ - 不是开源的,但易于使用

我更喜欢OxyProject Metrics VS Addin。


显然工具更容易,但我觉得很酷在powershell :)

此脚本查找.sln文件中的所有.csproj引用,然后在每个csproj文件中找到包含在编译中的文件。对于包含在编译中的每个文件,它会创建一个具有属性的对象:Solution,Project,File,Lines。它将所有这些对象存储在列表中,然后根据需要对数据进行分组和投影。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#path to the solution file e.g."D:\Code\Test.sln"
$slnFile ="D:\Code\Test.sln"


#results
$results = @()

#iterate through .csproj references in solution file
foreach($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}

使用Visual Studio 2010 Ultimate中的菜单 - >分析 - >计算代码度量标准选项。


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


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


同意Ali Parr。 WndTab Line Counter addin就是这样一个工具。
http://www.codeproject.com/KB/macros/linecount.aspx

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


您可以使用免费工具SourceMonitor

提供了许多措施:代码行,语句计数,复杂性,块深度

通过图表输出图形


这是Trick ..它也计算Js文件。

http://www.spoiledtechie.com/post/2011/11/22/How-To-Count-Lines-of-Code-in-Visual-Studio.aspx


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

脚本可以在这里找到:

https://gist.github.com/1674457


您可以在Visual Studio 2010中使用Project Line Counter加载项。通常它不能与Visual Studio 2010一起使用,但它可以使用有用的.reg文件:http://www.onemanmmo.com/index。 PHP?CMD = newsitem及评论= news.1.41.0


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


在Visual Studio 2015中,转到"分析"菜单,然后选择"计算代码度量标准"。