Visual Studioソリューションのコード行をどのようにカウントしますか?


800

ソリューション全体でコードの行数を見つけることは可能ですか?MZ-Toolsについて聞いたことがありますが、同等のオープンソースはありますか?


24
それはあまり役に立たないことに同意しますが、経営者がそれを求めている場合...
フェルミン

33
LoCは単なる測定基準であり、特に2つの場合に大きく影響します。1)コードベースの大きさを理解する、つまり新しいチームに参加するとき2)コードベースをよりコンパクトにしようとするときの進捗状況を測定する
Piotr Owsiak

191
ここで何人かの人々は、コードの行を数えることはそれをよく考えなければ役に立たないと言っています。一般に最小化する必要があるメトリックであるため、非常に役立ちます。これは、ソリューションの複雑さ(効率ではない)を測定する簡単な方法であり、問​​題が単純であることがわかっている場合は、コードの行数が多いほど、通常は品質が低下します。別のことは、質問が悪いものであると言うためだけである場合、人々はなぜわざわざ応答するのですか?もし先生があなたにあなたの質問をしたとしたら、あなたはどう思われますか?

77
VS2010には、コードのすべての行とその他の値もカウントする組み込みツールがあります。[表示]-> [その他のウィンドウ]-> [コードメトリックの結果]に移動します。隅にあるカレンダーのような小さなボタンをクリックして、ツールチップに「ソリューションのコードメトリックスを計算する」と表示され、VSがそれを実行します。
user959631 2012

64
担当者は、なぜコードをカウントしたいのかを常に伝える必要はありません。質問がこれが単純に述べられている場合、理由の周りのケースは無関係です。彼の質問に答えてください。嫌いです。なぜ必要なのかを明確にして、必要がない場合がある理由を尋ねる場合があります(個人的に必要性が見られない場合...そして傲慢にポスターにバッジを付けているだけです)。
PositiveGuy

回答:


525

Visual Studio 2010 Ultimateには次の機能が組み込まれています。

分析→コードメトリックの計算


12
Ultimate and Premium、think
Stefan Dragnev

39
警告:これは、単純に行数以外の多くのことを行います。また、「Maintainability Index」、「Cyclomatic Complexity」、「Depth of Inheritance」、および「Class Coupling」もリストされています。これらはすべて、計算がかなり複雑であり、その一部だけのメトリックを実行することはできません。これが意味することは、コードベースが特に大きい場合、何時間もそれを待っている可能性があることです。行数だけが必要な場合は、はるかに高速なソリューションがあります。
ダレルホフマン

4
vs2012 Ultimate =)
oCcSking 2013年

9
VS 2013には分析->コード指標の計算
Dinesh Rajan '29

42
残念ながら、これはネイティブC ++プロジェクトでは機能しません(少なくともVS2013では機能しません)。
キャメロン

844

私はこれに便利な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>

単一のコマンドラインで実行できるのに、なぜアプリ全体を使用するのですか?:)


19
(ライン数の提供を求められたのは、上層部がすべての製品を海外に移行して国内サイトを閉鎖するのにどれくらいの時間がかかるかを考えていたときだけでした。)
Greg D

8
(はい、これにはcodegen化されたファイルとコメントが含まれます。いいえ、それは私を困らせません。デザイナー、gen'dコード、およびコメントも維持する必要があります。)
Greg D

27
とても素敵で、powershellを完全に忘れていました。cmdのデフォルトの代替品になるはずです
lubos hasko

4
優秀な!あなたの最後のコメントは本当にそれを要約します、それは簡単な仕事です、それでなぜ重要でないツールを使うのですか?VSのすべてのバージョンに含まれるべきだと私は本当に思っていますが。
Sune Rievers

13
あなたはXAMLのために生成されたバッキングファイルを除外したい場合は、あなただけ-excludeスイッチを追加することができます: (dir -exclude *.g.cs -include *.cs,*.xaml -recurse | select-string .).Count
EZハート

349

Ctrl+ Shift+ を使用しましたF。次に、\n検索ボックスにaを入力し、正規表現ボックスを有効にします。次に、検索結果の画面の最後に、検索されたファイルの数とコードの行が見つかりました。

[^\n\s]\r\n空白行とスペースのみの行をスキップするために使用できます(コメントのZachへのクレジット)。


16
このソリューションには、空白行、コメント、ドキュメント、および分割ステートメントが誤って含まれています。多くのアプリケーションでは、これらはコード行として数えるべきではありません。
ジェイバクスター

1
少し不正確ですが(実際にコードで\ nを使用すると、その行は二重にカウントされます)、サードパーティのツールなしでコード行のROMが必要な場合は、最良の答えです
Joseph Duty

1
Look at these file types:すぐ下にあるオプションドロップダウンを選択して、特定のファイルタイプを選択することもできますenable regular expressions box
Moshii 2015年

1
非常に小さなプロジェクトで機能します... 1億行のコードがある場合、これにはしばらく時間がかかります。
湿地

11
[^\n\s]\r\n空白行が含まれていても、空白行をスキップします。
Zach Mierzejewski

219

VS2005、2003、2002のオープンソースラインカウンターは、次の場所で入手できます。

http://www.wndtabs.com/

Codeprojectのコードを完備したVSアドインを数える行の作成についての議論もここにあります

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

また、Slick Edit Gadgetsには素晴らしいラインカウンターがあります。

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

Microsoft Visual Studio Team System 2008には、優れたラインカウンターが含まれています。

ただ覚えておいてください:

コード行でプログラミングの進捗状況を測定することは、航空機の建造の進捗状況を重量で測定することに似ています。ビルゲイツ


1
多くの場合、コードの行を数えるのはJust Plain Sillyであり、数量は品質を意味しません。しかし、545,000ポンド(545,000ポンド!!)のDreamlinerを空中に置く巨大なチームは、ガレージで手作業で構築したウルトラライトを発売するのとはまったく異なる成果を上げています。そして、もしあなたがWindowsのコードの行数について考えるなら、たぶんビル氏はこれが通常とは異なる方法でこれを意味したかもしれません...?
UnconditionallyReinstateMonica 2010年

18
これらはいずれもVisual Studio 2010には適用されないようで、slickeditリンクが壊れています。
MGOwen 2011年

57
LOC機能は、Visual Studio 2010 Ultimateの[分析]> [コードメトリック]の下にあります。正しく翻訳したと思います。ドイツ語版があります。「分析」>「Codemetriken berechnen」
OneWorld、

2
Visual Studio 2012の場合、LoCメトリックはANALYZE> Calculate Code Metrics for Solution
tetri

2
また、VS2012には、UltimateエディションとPremiumエディションの両方にこの機能が含まれています(現在はProfessionalにもなっています)。
SWalters-モニカを

81

「検索」オプション(私が最も簡単だと思う)を実行したい人のための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 */

IntellisenseのXML

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

HTMLコメント:

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

ステートメントの使用:

using System;
using System.Web;

中括弧を開く:

{

中括弧を閉じる:

}

注:中括弧の間にあるものはすべて検索に含まれますが、この例では、実際の18行の非空白行ではなく、4行のコードのみがカウントされます。

        public class Test
        {
            /// <summary>
            /// Do Stuff
            /// </summary>
            public Test()
            {
                TestMe();
            }
            public void TestMe()
            {
                //Do Stuff Here
                /* And
                 * Do
                 * Stuff
                 * Here */
            }
        }

これは、以前のいくつかのオプションよりもはるかに正確なLOCカウントを提供するために作成し、共有することを考えました。ボスはLOCカウントを愛しているので、しばらくそれを使い続けています。他の誰かがこれを参考にしてくれることを願っています。質問がある場合や、機能させるために支援が必要な場合は、私に知らせてください。


18
コメントなしで反対票が大好きです。これは許可されるべきではありません。私の解決策は機能しませんか??? 投票についても気にせず、VS2012-2013ユーザー向けのアップデートを投稿したかっただけです。
ハワード・レノレット2014

生成されたすべてのコード(AssemblyInfoなど)をフィルターで取り除くことが難しいため、コードメトリックの分析/計算をお勧めします。
MKesper 2016年

4
お見事ですが、[ 検索オプション]セクションの[ 正規表現を使用]チェックボックスについて説明してください。はるかに簡単になります
Gogutz

@MKesperでもC ++では機能しない
d7samurai

XMLもHTMLもない場合の単純なバージョン... ^(?([^ \ r \ n])\ s)* [^ \ s +?/] + [^ \ n] * $。
LastBlow

80

このヒントを見つけました: VSを使用したLOC検索と置換

それがあなたが探しているものであれば、プラグインではありません。


私はこれが好きですが、そこの表現に小さな誤りを見つけたと思います。VB.Netの場合は^〜(:Wh @ ')〜(:Wh @ \#)。+と考え、C#の場合は^〜(:Wh @ //)〜(:Wh @ \ {:Wh @)〜(:Wh @ \}:Wh @)〜(:Wh @ \#)。+こうすることで、空白のコメント行とコンパイラ指令が適切に処理されます。とにかく、VB.NETを使用した方がうまく機能し、C#もテストしていません。
user12861 2011

^〜(:Wh @ //)〜(:Wh @ \ {:Wh @)〜(:Wh @ \}:Wh @)〜(:Wh @ \#)〜(:Wh @ $)。+は終了しましたC#の場合はうまく機能し、空白のみで構成される行がいくつか表示されていました。
user12861

コメント付きの行もすべて数えませんか?CODEの行だけでお願いします!
HydPhani 2013

4
これは私がVS2012で動作するように作成したもので(投稿されたものは2010年の時点で古くなっています)、コードの行のみを数えます。ディレクティブ、中括弧、xmlディレクティブ、空白行などを使用してすべてのコメントを除外し、真のコードのみをカウントします:^(?!(\ s **))(?!(\ s * \ -\-\>))(?!(\ s * \ <\!\-\-))(?!(\ s * \ n))(?!(\ s ** \ /))(?! (\ s * \ / *))(?!(\ s * \ / \ / \ /))(?!(\ s * \ / \ /))(?!(\ s * \}))(? !(\ s * \ {))(?!(\ s(using)))* $
ハワード・レノレット2013年

65

clocは、Perlベースの優れたコマンドラインで、Windowsで実行可能で、ファイル形式でグループ化されたコードの空白行、コメント行、ソース行を分解します。

これで、VSソリューションファイルでは特に実行されなくなりますが、ディレクトリを再帰的に処理できるため、必要に応じてファイル名フィルターを設定できます。

ここに彼らのウェブページからのサンプル出力があります:

プロンプト> cloc perl-5.10.0.tar.gz
    4076テキストファイル。
    3883個の固有ファイル。                                          
    1521ファイルは無視されました。

http://cloc.sourceforge.net v 1.07 T = 10.0 s(251.0 files / s、84566.5 lines / s)
-------------------------------------------------- -----------------------------
言語ファイルの空白のコメントコードスケール第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 50322 x 0.63 = 202.86
HTML 1 19 2 98 x 1.90 = 186.20
-------------------------------------------------- -----------------------------
合計:2510 142085 156406 547174 x 2.84 = 1556285.03
-------------------------------------------------- -----------------------------

第3世代の同等のスケールは、第3世代の言語で必要なコードの概算です。それほど有用ではないが、とにかく興味深い。


1
これは素晴らしく、とても使いやすいです。検索/置換ソリューションよりもはるかに簡単で、VSコードメトリックオプションよりも実際に何が行われているかが明確になります。ただ、choco install clocその後、cloc .ソリューションのディレクトリインチ 仕事完了!
Rory

1
CLOC WebサイトからWindows EXEをダウンロードし、Visual Studio 2017 Webサイトプロジェクトフォルダーで実行しました。魅力のように働いた。私は--by-file-by-langオプションが好きです。これは、個々のファイルと言語ごとの行数を、大きいものから小さいものへと並べ替えて一覧表示します。
ハンバーズ

42

ここでの回答は少し時代遅れです。新しいVisual Studioバージョン2010/2012では、この機能はすでに組み込まれているためです。したがって、拡張やツールを使用する理由はありません。

コード行をカウントする機能-メトリックを計算します。これを使用すると、プロジェクトまたはソリューションごとにメトリック(LOC、メンテナンスインデックス、循環係数、継承の深さ)を計算できます。

ソリューションエクスプローラーでソリューションまたはプロジェクトを右クリックし、

ここに画像の説明を入力してください

[メトリックを計算]を選択します

ここに画像の説明を入力してください

後で分析と集計のためのデータをExcelにインポートできます。また、Excelでは、生成されたクラスやその他のノイズをメトリックから除外できます。Lines of code LOCを含むこれらのメトリックは、ビルドプロセス中にも収集され、ビルドレポートに含まれます


2
Visual Studio 2010にもこのメトリックがあります。実際、VS2012にはまったく新しいものはありません。
Mike Chaliy、2012年

1
うん、でもここでの答えは2008年の時と少し古くなっているからだ。なぜそれがビルトイン機能であるのに何を使うか、拡張機能をインストールするのか。そして、それは新しい機能ではありませんが、多くの人はそれについて知りません。
Regfor

@MikeChaliy 2番目の紹介文が混乱している可能性があるため、このような混乱を避けるために少し書き直しました。
Regfor

n層のソリューションがありますが、次のエラーが表示されます。「呼び出しのターゲットによって例外がスローされました。」どうして?
user197508

5
これはコード行ではなく、コンパイルされた行です(つまり、ILに変換された後)。フェルミンはコンパイル済みのラインを探していたと思います。
mikeschuld 2013

29

VS2010と2012の間で正規表現が変更されたため、ここでの正規表現ソリューションのほとんどが機能しなくなりました

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

空白ではなく、単一のブラケット( '{'または '}')だけでなく、#includeまたはその他のプリプロセッサだけではないすべての行を検索します。

使用Ctrl- shift- fと正規表現が有効になっていることを確認してください。

VS 2010以前の対応する正規表現は

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

19

Visual Studio Team System 2008では、[分析]メニューから[ソリューションのコードメトリックを計算]を選択すると、ソリューション全体の行数が表示されます(特にg)。


12
Visual Studio Team System 2008は、アンマネージコードをカウントできません。;)
クリスチャン


11

簡単な解決策は、すべてのファイルを検索することです。ワイルドカードを使用しながら「*」を入力します。これはすべての行に一致します。検索結果ウィンドウの最後に、次のような行が表示されます。

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

もちろん、これは大規模なプロジェクトにはあまり適していません。すべての行が一致し、メモリにロードされて、検索結果ウィンドウで表示されるからです。

参照:




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}

3

VS2008用の他のシンプルなツール(オープンソース):http ://www.accendo.sk/Download/SourceStat.zip


3

Visual Studio 2010 Ultimateの[メニュー]-> [分析]-> [コードメトリックの計算]オプションを使用します。





2

無料のツールSourceMonitorを使用できます

コードの行数、ステートメントの数、複雑さ、ブロックの深さなど、多くの測定値を提供します

チャートを介したグラフィカルな出力があります



1

私は、フォルダー構造の行をカウントするための迅速で汚れたpowershellスクリプトを思い付きました。他の回答で参照されている他のツールの一部ほど完全に機能しているわけではありませんが、プロジェクトまたはソリューションでのコードファイルのサイズの大まかな比較を提供するのに十分だと思います。

スクリプトはここにあります:

https://gist.github.com/1674457



0

Visual Studio 2015で、[分析]メニューに移動し、[コードメトリックの計算]を選択します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.