ChatGPT解决这个技术问题 Extra ChatGPT

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

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

我同意它没有多大帮助,但如果管理层要求它......
LoC 只是一个指标,在以下两种情况下特别有趣:1)了解代码库有多大,即当您加入新团队时 2)在尝试使代码库更紧凑时衡量您的进度
这里有些人说,如果不好好考虑,计算代码行数是没有用的。它非常有用,因为它是一个通常应该最小化的指标。这是衡量解决方案复杂性(而不是效率)的一种简单方法,如果已知问题很简单,那么代码行数越多,质量通常越低。另一件事是,如果只是说这个问题不好,为什么人们还要费心回应呢?如果老师告诉你你的问题不应该被问到,你会怎么想。
在 VS2010 中,有一个内置工具可以计算所有代码行和其他值:转到查看 -> 其他窗口 -> 代码度量结果。角落里一个看起来像日历的小按钮,点击它,工具提示应该说为解决方案计算代码指标,然后让 VS 做这件事。
这个人并不总是需要告诉你他们为什么要计算代码。当这个问题被简单地陈述时,围绕为什么的案例是无关紧要的。只要回答他的问题。我讨厌那个。有时会问为什么当你清楚地需要而有时你却不需要(当你个人没有看到需要......并且只是傲慢地纠缠海报)。

G
Greg D

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

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


(我被要求提供线数的唯一一次是,高层管理人员正在计算将我们所有的产品迁移到海外需要多长时间,这样他们才能关闭我们的国内站点。)
(是的,这包括代码生成的文件和注释。不,这不会打扰我。设计师、生成的代码和注释也需要维护。)
非常好,完全忘记了powershell。它应该成为 cmd 的默认替换
出色的!您的结尾评论确实总结了它,这是一项微不足道的任务,那么为什么要使用非平凡的工具呢?虽然我真的认为它应该包含在所有版本的 VS 中。
如果要排除为 XAML 生成的支持文件,只需添加 -exclude 开关:(dir -exclude *.g.cs -include *.cs,*.xaml -recurse | select-string .).Count
a
adamj537

Visual Studio has built-in code metrics,包括代码行:

分析 → 计算代码指标


我认为终极版和高级版
警告:除了简单的行数之外,这还做了很多其他的事情。它还列出了“可维护性指数”、“循环复杂度”、“继承深度”和“类耦合”,所有这些计算起来都相当复杂,您不能只运行其中一部分的指标。这意味着如果您的代码库特别大,您可能会坐上几个小时等待它。如果你想要的只是行数,那里有更快的解决方案。
VS 2013 具有分析 --> 计算代码指标
太糟糕了,这不适用于本机 C++ 项目(至少在 VS2013 中不起作用)。
值得注意的是,根据msdn计算的 LoC 数量是基于 IL,而不是 实际代码
A
Abel

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

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


此解决方案错误地包括空行、注释、文档和拆分语句。对于许多应用程序,这些不应算作代码行。
虽然它有点不准确(如果你在代码中实际使用 \n,那行将被重复计算),如果你需要一个没有 3rd 方工具的代码行的 ROM,它仍然是最好的答案
您还可以通过选择 enable regular expressions box 下方的选项 Look at these file types: 下拉菜单来选择特定的文件类型。
适用于非常小的项目......当你有 1 亿行代码时,这将需要一些时间。
[^\n\s]\r\n 跳过空行,即使其中有空格。
M
MWS

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 包含一个很好的线路计数器。

请记住:

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


通常计算代码行数只是简单的愚蠢,数量并不意味着质量。然而,一个庞大的团队将 545,000 磅(545,000 磅!!)梦想客机投入空中,这与推出我在车库中单枪匹马建造的超轻飞机完全不同。而且,如果您考虑 Windows 中的代码行数,比尔先生的意思可能与通常采取的不同......?
这些似乎都不适用于 Visual Studio 2010,并且 slickedit 链接已损坏。
您可以在 Visual Studio 2010 Ultimate 中的“分析 > 代码指标”下找到 LOC 功能,希望我翻译正确。我有德文版。那里是“分析”>“Codemetriken berechnen”
对于 Visual Studio 2012,可以在 ANALYZE > Calculate Code Metrics for Solution 中找到 LoC 指标
此外,VS2012 在 Ultimate 和 Premium 版本(现在也包括 Professional)中都包含此功能。
H
Howard Renollet

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


喜欢不加评论的反对票。这不应该被允许。我的解决方案不起作用怎么办???我什至不在乎投票,我只是想为 VS2012-2013 用户发布更新。
很难过滤掉所有生成的代码(AssemblyInfo 等),因此应该首选分析/计算代码指标。
干得好,但请提及“查找选项”部分下的“使用正则表达式”复选框。它使事情变得更容易
@MKesper 但这不适用于 C++
一个更简单的版本,如果没有 XML,也没有 HTML...^(?([^\r\n])\s)*[^\s+?/]+[^\n]*$。
M
Mads Andersen

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

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


我喜欢这个,但我想我在那里的表达中发现了一个小错误。对于 VB.Net,我认为应该是 ^~(:Wh@')~(:Wh@\#).+ 而对于 C#,我认为应该是 ^~(:Wh@//)~(:Wh@\{:Wh @)~(:Wh@\}:Wh@)~(:Wh@\#).+ 这样就可以正确处理空白注释行和编译器指令。无论如何,它对我来说使用 VB.NET 效果更好,而我还没有测试过 C#。
^~(:Wh@//)~(:Wh@\{:Wh@)~(:Wh@\}:Wh@)~(:Wh@\#)~(:Wh@$).+ 结束了为 C# 工作得更好,我得到了一些只包含空格的行。
它不也计算所有注释行吗?请只写几行代码!
这是我在 VS2012 中使用的一个板条箱(发布的那个在 2010 年已经过时)并且只计算代码行数。它排除了所有注释,使用指令、花括号、xml 指令、空行等......只为您提供真正的代码计数:^(?!(\s**))(?!(\s*\ -\-\>))(?!(\s*\<\!\-\-))(?!(\s*\n))(?!(\s**\/))(?! (\s*\/*))(?!(\s*\/\/\/))(?!(\s*\/\/))(?!(\s*\}))(? !(\s*\{))(?!(\s(使用))).*$
R
Rory

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 中需要多少代码的粗略估计。不是非常有用,但无论如何都很有趣。


这很棒而且超级容易使用。比 Find/Replace 解决方案容易得多,并且比 VS Code Metrics 选项更清楚它实际在做什么。只需 choco install cloc 然后 cloc . 在您的解决方案目录中。任务完成!
我从 CLOC website 下载了 Windows EXE 并在我的 Visual Studio 2017 网站项目文件夹中运行它。像魅力一样工作。我喜欢 --by-file-by-lang 选项,它列出了每个文件和语言的行数,从大到小排序。
R
Regfor

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

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

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

https://i.stack.imgur.com/pkiRu.png

并选择“计算指标”

https://i.stack.imgur.com/j9myK.png

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


Visual Studio 2010 也有这个指标。实际上在 VS2012 中根本没有什么新东西。
是的,但是这里的答案是从 vs 2008 开始的,而且有点过时了,为什么要使用任何东西或安装一些扩展,因为它是一个内置功能。即使它不是很多人都不知道的新功能。
@MikeChaliy 可能是第二个介绍句让您感到困惑,因此我对其进行了一些改写以避免这种混淆。
我有一个 n 层解决方案,但显示此错误:“调用目标已引发异常。”为什么?
这不是代码行,而是 Compiled Lines(即转换为 IL 之后)。我认为 Fermin 正在寻找预编译的行。
P
Philipp M

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

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

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

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

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

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

C
Christopher Klein

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


Visual Studio Team System 2008 无法计算非托管代码。 ;)
P
Philipp M

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

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


还有一个version for VS 2012
B
Brian Webster

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

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

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

参考:

高级示例


A
Adrian Thompson Phillips

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

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

这适用于 Visual Studio 2019 Professional 和 Enterprise。


不适用于 C/C++ 项目。仅适用于不是网站项目或共享项目的 C# 和 Visual Basic
也可用或 Visual Studio 2019/2022 社区
E
Edward Wilde

你可以使用:

SCLOCCount http://www.dwheeler.com/sloccount/- 开源

loc 指标,http://www.locmetrics.com/ - 不是开源的,但易于使用


S
Selçuk Öztürk

我更喜欢 OxyProject Metrics VS 插件。


a
anakic

显然工具更容易,但我觉得在 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}

L
LiborBes

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


s
sunil

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


T
Travis

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


f
fastyond

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

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


A
H
Hovhannes Hakobyan

您可以使用免费工具 SourceMonitor

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

通过图表具有图形输出


R
Robert Basler

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


J
Jesse Taber

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

该脚本可以在这里找到:

https://gist.github.com/1674457


s
sonofdelphi

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


A
Atters

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