你如何計算Visual Studio解決方案中的代碼行數?




visual-studio code-metrics (20)

對於未來的讀者,我想建議Visual Studio 2010DPack擴展

它有一個內置的實用程序負載,包括一個行計數器,說明有多少行是空白的,代碼等。

是否有可能在整個解決方案中找到代碼行數? 我聽說過MZ-Tools ,但有沒有相當於開源的東西?


在Visual Studio Team System 2008中,您可以從菜單分析 - >'計算代碼度量標準的解決方案',它會為您提供整個解決方案的行數(其中包括g




Visual Studio 2010 Ultimate擁有這種內置功能。

分析 - >計算代碼度量


很明顯,工具更容易,但我感覺很酷在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}



使用菜單 - >分析 - >計算Visual Studio 2010 Ultimate中的代碼度量選項。


我使用了Ctrl + Shift + F。 接下來,在搜索框中添加一個\n並啟用正則表達式框。 然後在查找結果中,屏幕的末尾是搜索到的文件數量和找到的代碼行數。


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

第三代等效量表是對第三代語言需要多少代碼的粗略估計。 不是非常有用,但無論如何有趣。


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包含一個很好的在線計數器。

但請記住:

通過代碼行來測量編程進度就像衡量飛機建築進度的重量。 比爾蓋茨


你可以使用免費的工具SourceMonitor

給出了很多措施:代碼行,語句計數,複雜性,塊深度

通過圖表提供圖形輸出


一個簡單的解決方案是搜索所有文件。 使用通配符時輸入“*”。 這將匹配所有線路。 在查找結果窗口的末尾,您應該看到一行:

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

當然這對於大型項目來說並不是很好,因為所有行都被修改並加載到內存中,以便在查找結果窗口顯示出來。

參考:


這裡的答案有點過時了,可能是從2008年的時候開始的。 因為在較新的Visual Studio版本2010/2012中,此功能已經內置。 因此沒有理由使用任何擴展或工具。

計算代碼行的功能 - 計算指標。 有了它,您可以計算每個項目或解決方案的指標(LOC,Maintaince指數,Cyclomatic指數,繼承深度)。

只需在Solution Explorer中右鍵單擊解決方案或項目,

並選擇“計算指標”

後來的分析和匯總數據可以導入到Excel中。 同樣在Excel中,您可以過濾出生成的類或其他指標中的噪音。 這些指標包括代碼行LOC可以在構建過程中收集,並包含在構建報告中




以下是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;

打開大括號:

{

關閉大括號:

}

注:大括號之間的任何內容都將包含在搜索中,但在本示例中,只有4行代碼會被計數,而不是18個實際的非空行:

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

我創造了這個,給了我一個更準確的LOC計數比以前的選擇,並認為我會分享。 老闆們很喜歡LOC的數量,所以我堅持了一段時間。 我希望別人能找到這個幫助,讓我知道如果你有任何問題或需要幫助得到它的工作。


正則表達式在VS2010和2012之間發生了變化,因此這裡的大多數正則表達式解決方案不再有效

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

將找到所有不是空白的行,不僅僅是一個括號('{'或'}'),而不僅僅是一個#include或其他預處理器。

使用Ctrl - shift - f並確保啟用正則表達式。

VS 2010和更老版本的相應正則表達式是

^~(:[email protected]//.+)~(:[email protected]\{:[email protected])~(:[email protected]\}:[email protected])~(:[email protected]/#).+







line-count