876

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

4

26 回答 26

912

我发现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>

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

于 2009-08-07T14:02:13.353 回答
648

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

分析 → 计算代码指标

于 2011-03-01T02:25:09.483 回答
377

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

您可以使用[^\n\s]\r\n跳过空白行和仅空格行(评论中 Zach 的功劳)。

于 2012-02-21T20:46:39.857 回答
219

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

http://www.wndtabs.com/

还讨论了创建行计数 VS 插件,并在 Codeproject 上完成了代码,here

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

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

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

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

请记住:

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

于 2009-08-07T13:43:39.587 回答
93

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

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


^(?!(\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 计数,所以我坚持了一段时间。我希望其他人可以发现这对您有帮助,如果您有任何问题或需要帮助以使其正常工作,请告诉我。

于 2013-11-04T18:18:51.497 回答
80

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

如果那是您正在寻找的东西,则不是插件。

于 2010-02-28T14:27:54.353 回答
68

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

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

这是他们网页的示例输出:

提示> cloc perl-5.10.0.tar.gz
    4076 个文本文件。
    3883 个独特的文件。                                          
    1521 个文件被忽略。

http://cloc.sourceforge.net v 1.07 T=10.0 秒(251.0 个文件/秒,84566.5 行/秒)
-------------------------------------------------- -----------------------------------------
语言文件空白注释代码规模第 3 代。等价的
-------------------------------------------------- -----------------------------------------
Perl 2052 110356 112521 309778 x 4.00 = 1239112.00
C 135 18718 22862 140483 x 0.77 = 108171.91
C/C++ 头文件 147 7650 12093 44042 x 1.00 = 44042.00
伯恩壳牌 116 3402 5789 36882 x 3.81 = 140520.42
Lisp 1 684 2242 7515 x 1.25 = 9393.75
使 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 批次 11 85 50 322 x 0.63 = 202.86
HTML 1 19 2 98 x 1.90 = 186.20
-------------------------------------------------- -----------------------------------------
总和:2510 142085 156406 547174 x 2.84 = 1556285.03
-------------------------------------------------- -----------------------------------------

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

于 2009-08-07T16:31:42.390 回答
44

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

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

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

在此处输入图像描述

并选择“计算指标”

在此处输入图像描述

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

于 2012-11-14T10:45:04.510 回答
29

正则表达式在 VS2010 和 2012 之间发生了变化,所以这里的大部分正则表达式解决方案不再起作用

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

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

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

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

^~(:Wh@//.+)~(:Wh@\{:Wh@)~(:Wh@\}:Wh@)~(:Wh@/#).+
于 2013-10-01T12:20:51.897 回答
19

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

于 2009-08-07T13:51:25.177 回答
17

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

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

于 2012-03-17T17:03:06.263 回答
13

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

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

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

参考:

于 2010-04-25T05:41:43.133 回答
11

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

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

这适用于 Visual Studio 2019 Professional 和 Enterprise。

于 2020-07-31T13:51:52.910 回答
10

你可以使用:

于 2009-08-07T13:39:44.663 回答
5

我更喜欢OxyProject Metrics VS Addin。

于 2010-05-13T14:00:33.750 回答
4

显然工具更容易,但我觉得在 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 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}
于 2013-05-22T09:05:24.230 回答
3

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

于 2010-01-17T14:34:29.177 回答
3

在 Visual Studio 2010 Ultimate 中使用 Menu-> Analyze -> Calculate Code Metrics 选项。

于 2011-07-11T22:14:33.800 回答
3

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

于 2014-04-15T18:55:43.953 回答
2

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

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

于 2012-03-11T01:21:27.060 回答
2

这是诀窍..它也计算 Js 文件。

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

于 2013-05-22T09:49:07.857 回答
2

您可以使用免费工具SourceMonitor

给出了很多衡量标准:代码行数、语句数、复杂性、块深度

通过图表具有图形输出

于 2014-04-08T07:16:01.200 回答
1

您可以在 Visual Studio 2010 中使用 Project Line Counter 加载项。通常它不适用于 Visual Studio 2010,但它适用于此处的有用 .reg 文件:http://www.onemanmmo.com/index。 php?cmd=newsitem&comment=news.1.41.0

于 2011-06-04T07:44:21.893 回答
1

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

该脚本可以在这里找到:

https://gist.github.com/1674457

于 2012-01-25T03:18:08.260 回答
0

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

于 2010-05-13T14:07:42.100 回答
0

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

于 2017-01-28T22:45:56.423 回答