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

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

Ответ 1

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

Анализ → Вычисление кодовых показателей

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

http://www.wndtabs.com/

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

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

Также у Slick Edit Gadgets есть отличный счетчик строк:

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

и Microsoft Visual Studio Team System 2008 содержит хороший счетчик строк.

Просто запомните хотя:

Измерение прогресса программирования по линиям кода подобно измерению прогресса самолета по массе. Билл Гейтс

Ответ 6

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

Введите следующий RegEx в поле "Найти". Обязательно выберите "Использовать регулярные выражения". Измените параметр поиска на "Текущий проект" или "Цельное решение" в зависимости от ваших потребностей. Теперь выберите "Найти все". В нижней части окна "Результаты поиска" вы увидите "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 для Intellisense

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

Ответ 7

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

Эквивалентная шкала третьего поколения - это приблизительная оценка того, сколько кода потребуется на

Ответ 8

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

Функция подсчета строк кода - Calculate Metrics. С его помощью вы можете рассчитать свои показатели (LOC, индекс поддержки, циклонный индекс, глубину наследования) для каждого проекта или решения.

Просто щелкните правой кнопкой мыши по решению или проекту в обозревателе решений,

enter image description here

и выберите "Вычислить показатели"

enter image description here

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

Ответ 9

Регулярные выражения изменились между 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]/#).+

Ответ 10

В Visual Studio Team System 2008 вы можете сделать из меню Analyze → "Calculate Metrics for Solution", и он даст вам количество строк всего вашего решения (среди прочего g)

Ответ 11

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

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

Ответ 12

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

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

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

Справка:

Ответ 14

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

Ответ 15

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

Этот script находит все ссылки .csproj в файле .sln, а затем в каждом файле csproj находит файлы, включенные для компиляции. Для каждого файла, который включен для компиляции, он создает объект со свойствами: Solution, Project, File, Lines. Он сохраняет все эти объекты в списке, а затем группирует и проектирует данные по мере необходимости.

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

Ответ 17

В меню "Visual Studio 2010 Ultimate" выберите "Меню- > Анализ → " Рассчитать показатели котировки ".

Ответ 18

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

Ответ 21

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

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

Имеет графические выходы через диаграммы

Ответ 23

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

script можно найти здесь:

https://gist.github.com/1674457

Ответ 24

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