Как подсчитать строки кода в решении Visual Studio?

можно ли найти количество строк кода во всем решении? Я слышал о MZ-Tools, но есть ли эквивалент с открытым исходным кодом?

25 ответов


Visual Studio 2010 Ultimate имеет этот встроенный.

Анализ - > Вычислить Метрики Кода


Я нашел 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>

зачем использовать все приложение, когда одна командная строка будет делать это? :)


Я Ctrl+ Shift+F. Далее ставим \n в поле поиска и включить регулярные выражения. Затем в результатах поиска в конце экрана отображается количество искомых файлов и строк найденного кода.


счетчик строк с открытым исходным кодом для VS2005, 2003 и 2002 доступен здесь:

http://www.wndtabs.com/

существует также обсуждение создания подсчета строк VS addin, в комплекте с кодом на Codeproject, здесь

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

также гладкие гаджеты редактирования имеют хороший счетчик строк, здесь:

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

и Microsoft Visual Studio Team System 2008 включает в себя хороший счетчик строк.

просто помни:

измерять программируя прогресс линиями кода как измерять прогресс здания воздушных судн весом. Билл Гейтс!--1-->


нашел этот совет: LOC с VS найти и заменить

Не плагин, хотя, если это то, что вы ищете.


вот обновление для Visual Studio 2012/2013/2015 для тех, кто хочет сделать параметр "найти" (который я считаю самым простым): это регулярное выражение найдет все непустые строки с несколькими исключениями, чтобы дать наиболее точные результаты.

введите следующее выражение в поле "Найти". Обязательно выберите опцию "Использовать регулярные выражения". Измените параметр поиска на "текущий проект" или "Все решение" в зависимости от ваших потребностей. Теперь выберите "Найти все". На дно Результаты Поиска окно, вы увидите "соответствующие строки", которые являются строками кода.


^(?!(\s*\*))(?!(\s*\-\-\>))(?!(\s*\<\!\-\-))(?!(\s*\n))(?!(\s*\*\/))(?!(\s*\/\*))(?!(\s*\/\/\/))(?!(\s*\/\/))(?!(\s*\}))(?!(\s*\{))(?!(\s(using))).*$

это выражение исключает следующие элементы:


комментарии

// This is a comment

многострочные комментарии (при условии, что строки правильно прокомментированы с * Перед каждой строкой)

/* I am a
* multi-line
* comment */

XML для Технология IntelliSense

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

комментарии HTML:

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

операторы using:

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 counts, поэтому я застрял с ним на некоторое время. Я надеюсь, что кто-то еще может найти это полезным, дайте мне знать, если у вас есть какие-либо вопросы или нужна помощь в его работе.


cloc - отличная командная строка, Perl-based, Windows-executable, которая будет разбивать пустые строки, прокомментированные строки и исходные строки кода, сгруппированные по файловым форматам.

теперь он не будет специально запускаться в файле решения 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
-------------------------------------------------------------------------------

эквивалентная шкала третьего поколения является грубой оценка того, сколько кода потребуется в язык третьего поколения. Не очень полезная, но интересная.


ответы здесь немного устарели,может быть, с 2008 года. Поскольку в более новых версиях Visual Studio 2010/2012 эта функция уже встроена. Таким образом, нет никаких причин использовать для этого расширение или инструменты.

функция подсчета строк кода-вычисление метрик. С его помощью вы можете рассчитать свои метрики (LOC, maintaince index, Cyclomatic index, глубина наследования) для каждого проекта или решения.

просто щелкните правой кнопкой мыши на решении или проекте в решении Обозреватель

enter image description here

и выбрать "измерения"

enter image description here

более поздние данные для анализа и агрегирования могут быть импортированы в Excel. Также в Excel вы можете отфильтровать сгенерированные классы или другой шум от ваших метрик. Эти метрики, включая строки кода LOC, могут быть собраны также в процессе сборки и включены в отчет сборки


регулярные выражения изменились между VS2010 и 2012, поэтому большинство решений регулярных выражений здесь больше не работают

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

найдет все строки, которые не являются пустыми, не являются только одной скобкой ('{'или'}'), а не только #include или другим препроцессором.

использовать Ctrl-shift-f и убедитесь, что регулярные выражения включены.

соответствующее регулярное выражение для VS 2010 и старше

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

в Visual Studio Team System 2008 Вы можете сделать из меню анализ -> "вычислить метрики кода для решения", и это даст вам количество строк всего вашего решения (среди прочего g)


для будущих читателей, я хотел бы посоветовать расширение DPack для Visual Studio 2010.

у него есть загрузка встроенных утилит, включая счетчик строк,который говорит, сколько строк пусто, код и т. д.


простым решением является поиск во всех файлах. Введите "*" при использовании подстановочных знаков. Что соответствовало бы всем линиям. В конце окна результатов поиска вы увидите строку вида:

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

конечно, это не очень хорошо для больших проектов, так как все строки обрабатываются и загружаются в память, которая будет отображаться в окне результатов поиска.

ссылки:


вы можете использовать:


предпочитаю Показатели OxyProject VS Addin.


очевидно, что инструменты проще, но я чувствую себя круто, делая это в powershell:)

этот скрипт находит все .csproj файл ссылки .sln файл, а потом в каждом файле 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}

другое простой инструмент для VS2008 (открытый код): http://www.accendo.sk/Download/SourceStat.zip


использовать меню - > анализ - > вычислить параметр метрики кода в Visual Studio 2010 Ultimate.


можно использовать Метрики Кода Visual Studio PowerTool 10.0. Это утилита командной строки, которая вычисляет несколько метрик управляемого кода для вас (включая строки кода). Вы можете получить плагин VS 2010, который приносит инструмент в Visual Studio, и делает это так же быстро, как выбор пункта меню и нажав кнопку " Анализ решения."


согласен с Али Парр. Таким инструментом является счетчик строк wndtab. http://www.codeproject.com/KB/macros/linecount.aspx

Это также хорошая идея для поиска с сайта загрузки, чтобы найти какой-то связанный инструмент. http://www.cnet.com/1770-5_1-0.html?query=code + счетчик и тег=srch


вот в чем фокус.. Он также подсчитывает файл Js.

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


вы можете использовать бесплатный инструмент SourceMonitor

дает много мер: строки кода, количество операторов, сложность, глубина блока

отображение результатов на диаграммах


можно использовать надстройку счетчика строк проекта в Visual Studio 2010. Обычно он не работает с Visual Studio 2010 ,но он работает с полезным.reg файл отсюда:http://www.onemanmmo.com/index.php?cmd=newsitem&comment=news.1.41.0


Я придумал быстрый и грязный скрипт powershell для подсчета строк в структуре папок. Это не так полнофункционально, как некоторые другие инструменты, на которые ссылаются в других ответах, но я думаю, что это достаточно хорошо, чтобы обеспечить грубое сравнение размера файлов кода относительно друг друга в проекте или решении.

скрипт можно найти здесь:

https://gist.github.com/1674457


попробуйте neptuner. Он также дает вам такие вещи, как пробелы, вкладки, строки комментариев в дополнение к LoC. http://neptuner.googlecode.com/files/neptuner_0_30_windows.zip


в Visual Studio 2015 перейдите в меню анализ и выберите "вычислить метрики кода".