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

时间:2009-08-07 13:35:47

标签: visual-studio code-metrics lines-of-code line-count

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

26 个答案:

答案 0 :(得分:797)

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

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

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

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

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

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

答案 1 :(得分:456)

Visual Studio 2010 Ultimate具有此内置功能。<​​/ p>

分析 - &gt;计算代码指标

答案 2 :(得分:340)

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

答案 3 :(得分:218)

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包含一个良好的行计数器。

请记住:

  

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

答案 4 :(得分:80)

找到这个提示: LOC with VS Find and replace

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

答案 5 :(得分:74)

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

在“查找”框中输入以下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>

HTML评论:

<!-- 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计数,所以我坚持了一段时间。我希望其他人可以找到这个有用的,如果您有任何问题或需要帮助让它工作,请告诉我。

答案 6 :(得分:60)

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

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

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


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
-------------------------------------------------------------------------------

第三代等效量表是对third generation language中需要多少代码的粗略估计。不是很有用,但无论如何都很有趣。

答案 7 :(得分:42)

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

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

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

enter image description here

并选择“计算指标”

enter image description here

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

答案 8 :(得分:28)

正则表达式在VS2010和2012之间发生了变化,因此大多数正则表达式解决方案不再起作用

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

会发现所有非空白的行不仅仅是一个支架(&#39; {&#39;或&#39;}&#39;)而不仅仅是#include或其他预处理器。< / p>

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

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

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

答案 9 :(得分:19)

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

答案 10 :(得分:17)

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

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

答案 11 :(得分:11)

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

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

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

<强>参考:

答案 12 :(得分:9)

您可以使用:

答案 13 :(得分:5)

我更喜欢OxyProject Metrics VS Addin。

答案 14 :(得分:4)

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

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

#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}

答案 15 :(得分:3)

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

答案 16 :(得分:3)

您可以使用Visual Studio Code Metrics PowerTool 10.0。它是一个命令行实用程序,可以为您计算托管代码的一些指标(包括代码行)。您可以获得brings the tool into Visual Studio的VS 2010插件,并使其快速选择菜单项并单击&#34;分析解决方案。&#34;

答案 17 :(得分:3)

使用菜单 - &gt;分析 - &gt;在Visual Studio 2010 Ultimate中计算代码度量标准选项。

答案 18 :(得分:2)

您可以使用免费工具SourceMonitor

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

通过图表输出图形

答案 19 :(得分:2)

同意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

答案 20 :(得分:2)

答案 21 :(得分:1)

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

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

这在Visual Studio 2019 Professional和Enterprise中都可以使用。

答案 22 :(得分:1)

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

脚本可以在这里找到:

https://gist.github.com/1674457

答案 23 :(得分:1)

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

答案 24 :(得分:0)

在Visual Studio 2015中,转到“分析”菜单并选择“#34;计算代码度量标准&#34;。

答案 25 :(得分:0)

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