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

Fer*_*min 765 lines-of-code code-metrics line-count visual-studio

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

Gre*_*g D 823

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

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

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

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

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

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

  • 非常好,完全忘记了powershell.它应该成为cmd的默认替代品 (26认同)
  • (我唯一一次被要求提供生产线计数的时候,高层管理人员正在考虑将所有产品迁移到海外所需的时间,以便他们可以关闭我们的国内网站.) (19认同)
  • 如果要排除为XAML生成的后备文件,可以只添加-exclude开关:`(dir -exclude*.g.cs -include*.cs,*.xaml -recurse | select-string.). Count` (13认同)
  • (是的,这包括codegen的文件和评论.不,这不会打扰我.设计师,代码和评论也需要维护.) (7认同)
  • 优秀!你的结束评论真的总结了,这是一项微不足道的任务,那么为什么要使用一个非平凡的工具呢?虽然我真的认为它应该包含在VS的所有版本中. (3认同)
  • 完美,我更喜欢这个为VS安装另一个插件或使用整个外部程序! (2认同)

Her*_*ter 483

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

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

  • 太糟糕了,这不适用于本机C++项目(至少在VS2013中没有). (40认同)
  • 警告:除了简单的行计数之外,这还有许多其他功能.它还列出了"可维护性指数","循环复杂性","继承深度"和"类耦合",所有这些都是非常复杂的计算,并且您无法仅针对其中的一部分运行指标.这意味着如果你的代码库特别大,你可能会坐几个小时等待它.如果你想要的只是行数,那么就有更快的解决方案. (38认同)
  • 终极和高级,我想 (12认同)
  • VS 2013具有分析 - >计算代码指标 (8认同)
  • 同样在vs2012 ultimate =) (4认同)
  • 值得注意的是,根据[msdn](https://msdn.microsoft.com/en-us/library/bb385914.aspx),计算的LoC数量基于**IL**,而不是*实际代码*. (4认同)
  • 这对于纯 .NET 代码可能很有用,但例如,在具有 JavaScript、HTML、CSS 以及可能超出 .NET 的其他代码的 Web 应用程序中,这没有帮助。我对我的 Angular 应用程序运行了这个,它是 100% JavaScript/HTML/CSS,并被告知它包含 0 行代码。 (3认同)
  • [根据MSDN](https://msdn.microsoft.com/en-us/library/bb385914.aspx),此计数基于IL,因此不反映源代码行数.@Cyber​​Fox (3认同)
  • @David有一个专门的按钮可以将数据导出到Excel,就在结果的正上方. (2认同)
  • 应该提到的是,此解决方案将排除任何标有“GenerateCodeAttribute”的代码。意味着由设计者、工具等生成的任何代码。 (2认同)

Nic*_*ner 341

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

  • 此解决方案错误地包括空行,注释,文档和拆分语句.对于许多应用程序,不应将其视为代码行. (16认同)
  • `[^ \n\s]\r \n`跳过空行,即使空格也是如此. (7认同)
  • 虽然它有点不准确(如果您在代码中实际使用 \n,则该行将被重复计算),但如果您需要没有第三方工具的代码行 ROM,它仍然是最好的答案 (2认同)
  • 适用于非常小的项目...当您有 1 亿行代码时,这将需要一些时间。 (2认同)

Ali*_*arr 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包括一个良好的行计数器.

请记住:

通过代码行测量编程进度就像按重量测量飞机构建进度一样.比尔盖茨

  • 您可以在*"Analysis> Code metrics"下找到Visual Studio 2010 Ultimate中的LOC功能*我希望我能正确翻译它.我有德文版.那里是"分析">"Codemetriken berechnen" (56认同)
  • **这些似乎都不适用于Visual Studio 2010,并且slickedit链接已损坏.** (18认同)
  • 对于Visual Studio 2012,可以在_ANALYZE>计算解决方案的代码度量标准中找到LoC指标 (2认同)
  • 此外,VS2012在Ultimate版和高级版中都包含此功能(现在也是Professional版). (2认同)

Mad*_*sen 80

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

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

  • 这是我在VS2012中使用的一个(在2010年发布的一个已经过时)并且只计算代码行.它排除了所有注释,使用指令,花括号,xml指令,空行等....给你一个真正的代码只计数:^(?!(\ s*\*))(?!(\ s*)\ - \ - \>))((\ S*\<\\ - ?!\ - ?!?!))((\ S*\n)的)((\ S*\*\/))( ?!(\ S*\/\*))(?!(\ S*\/\/\/))(?!(\ S*\/\/))(?!(\ S*\}) )(?!(\ S*\{))(?!(\ s(使用))).*$ (4认同)

How*_*let 75

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

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


^(?!(\s*\*))(?!(\s*\-\-\>))(?!(\s*\<\!\-\-))(?!(\s*\n))(?!(\s*\*\/))(?!(\s*\/\*))(?!(\s*\/\/\/))(?!(\s*\/\/))(?!(\s*\}))(?!(\s*\{))(?!(\s(using))).*$
Run Code Online (Sandbox Code Playgroud)

此RegEx不包括以下项目:


评论

// This is a comment
Run Code Online (Sandbox Code Playgroud)

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

/* I am a
* multi-line
* comment */
Run Code Online (Sandbox Code Playgroud)

用于智能感知的XML

/// <summary>
/// I'm a class description for Intellisense
/// </summary>
Run Code Online (Sandbox Code Playgroud)

HTML评论:

<!-- I am a HTML Comment -->
Run Code Online (Sandbox Code Playgroud)

使用陈述:

using System;
using System.Web;
Run Code Online (Sandbox Code Playgroud)

打开花括号:

{
Run Code Online (Sandbox Code Playgroud)

闭合花括号:

}
Run Code Online (Sandbox Code Playgroud)

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

        public class Test
        {
            /// <summary>
            /// Do Stuff
            /// </summary>
            public Test()
            {
                TestMe();
            }
            public void TestMe()
            {
                //Do Stuff Here
                /* And
                 * Do
                 * Stuff
                 * Here */
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

  • 喜欢downvote而不评论.这不应该被允许.我的解决方案怎么办?我甚至不关心投票,我只想发布VS2012-2013用户的更新. (17认同)
  • 干得好,但请注意**查找选项**部分下的**使用正则表达式**复选框.它使它更容易 (4认同)
  • @MKesper 但这对 C++ 不起作用 (2认同)

Mar*_*off 62

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

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

  • 这很棒而且超级容易使用。比查找/替换解决方案更容易,并且比 VS Code Metrics 选项更清楚它实际在做什么。只需在解决方案目录中添加“choco install cloc”,然后添加“cloc .”即可。任务完成! (2认同)
  • 我从 [CLOC 网站](https://github.com/AlDanial/cloc) 下载了 Windows EXE,并在我的 Visual Studio 2017 网站项目文件夹中运行它。工作起来就像一个魅力。我喜欢 --by-file-by-lang 选项,它列出了每个文件和语言的行数,从最大到最小排序。 (2认同)

Reg*_*for 42

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

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

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

在此输入图像描述

并选择"计算指标"

在此输入图像描述

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

  • 这不是代码行,而是编译行(即在它变成IL之后).我认为Fermin正在寻找预编译线. (5认同)
  • Visual Studio 2010也有此指标.实际上VS2012根本没什么新东西. (2认同)

use*_*915 28

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

(^(?!(\s*//.+)))+(^(?!(#.+)))+(^(?!(\s*\{.+)))+(^(?!(\s*\}.+)))+(^(?!(\s*\r?$)))+
Run Code Online (Sandbox Code Playgroud)

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

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

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

^~(:Wh@//.+)~(:Wh@\{:Wh@)~(:Wh@\}:Wh@)~(:Wh@/#).+
Run Code Online (Sandbox Code Playgroud)


Chr*_*ein 19

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

  • Visual Studio Team System 2008无法计算非托管代码.;) (12认同)

Ash*_*ies 17

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

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


Sog*_*tar 11

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

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

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

参考:


Adr*_*ips 11

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

'Analyze' -> 'Calculate Code Metrics' -> 'For Solution'
Run Code Online (Sandbox Code Playgroud)

这适用于 Visual Studio 2019 Professional 和 Enterprise。

  • 也适用于社区版。 (2认同)
  • 不适用于 C/C++ 项目。仅适用于 C# 和 Visual Basic,它们不是网站项目或共享项目 (2认同)

Edw*_*lde 9

你可以使用:


Sel*_*ürk 5

我更喜欢OxyProject Metrics VS Addin.