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

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

7.08.2009 13:35:47
Я согласен, что это не очень помогает, но если руководство просит об этом ...
Fermin 7.08.2009 14:54:48
LoC - это просто показатель, который особенно интересен в 2 случаях: 1) чтобы понять, насколько велика база кода, т.е. когда вы присоединяетесь к новой команде 2) измерить свой прогресс при попытке сделать вашу базу кода более компактной
Piotr Owsiak 11.10.2010 17:07:33
Некоторые люди здесь говорят, что считать строки кода бесполезно, не задумываясь об этом. Это очень полезно, так как это показатель, который обычно должен быть сведен к минимуму. Это простой способ измерить сложность решения (а не эффективность), и, если известно, что проблема проста, чем больше строк кода, тем ниже качество. Другое дело, почему люди не отвечают, если просто сказать, что вопрос плохой? Что бы вы подумали, если бы учитель сказал вам, что ваш вопрос просто не следует задавать.
user753899 14.05.2011 18:35:21
В VS2010 есть встроенный инструмент, который подсчитывает все строки кода и другие значения: перейдите в View -> Other Windows -> Результаты метрик кода. Нажмите маленькую кнопку в углу, похожую на календарь, и нажмите на нее, чтобы всплывающая подсказка показала «Рассчитать метрики кода для решения», и пусть VS сделает свое дело.
user959631 27.07.2012 14:37:39
Человек не всегда должен говорить вам, почему он хочет считать код. Когда вопрос в этом просто сформулирован, случай вокруг почему не имеет значения. Просто ответь на его вопрос. Я ненавижу это. Есть моменты, чтобы спросить, почему, когда вам явно нужно, а потом бывают случаи, когда вы этого не делаете (когда вы лично не видите в этом необходимости ... и просто надменяете плакат в высокомерии).
PositiveGuy 10.01.2013 22:26:07
25 ОТВЕТОВ
РЕШЕНИЕ

Visual Studio 2010 Ultimate имеет следующие встроенные функции:

Анализ → Рассчитать метрики кода

511
10.02.2020 16:38:09
Ultimate и Premium, я думаю
Stefan Dragnev 29.08.2011 16:42:52
Предупреждение: это делает много других вещей, помимо простого подсчета строк. В нем также перечислены «Индекс ремонтопригодности», «Цикломатическая сложность», «Глубина наследования» и «Соединение классов», все из которых довольно сложны для вычисления, и вы не можете запустить метрики только для его части. Это означает, что если ваша кодовая база особенно велика, вы можете часами сидеть в ожидании этого. Если все, что вам нужно, это счетчик строк, есть гораздо более быстрые решения.
Darrel Hoffman 24.09.2012 17:55:05
также на vs2012 ultimate =)
oCcSking 21.05.2013 10:35:15
VS 2013 имеет Анализ -> Рассчитать метрики кода
Dinesh Rajan 29.05.2014 15:47:15
Жаль, что это не работает с нативными проектами C ++ (по крайней мере, в VS2013).
Cameron 18.09.2014 18:22:45

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

9
7.08.2009 13:39:44

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

http://www.wndtabs.com/

Здесь также обсуждается создание надстройки с подсчетом строк, дополненной кодом на Codeproject, здесь

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

Также Slick Edit Gadgets имеют хороший счетчик строк, здесь:

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

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

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

Измерение прогресса в программировании с помощью строк кода похоже на измерение прогресса в самолетостроении по весу. Билл Гейтс

219
28.07.2015 07:45:56
Часто считать строки кода просто глупо, а количество не означает качество. Тем не менее, огромная команда, выпускающая 545 000 фунтов (545 000 фунтов !!) Dreamliner в воздух, является совершенно другим достижением, чем запуск ультралита, который я построил в одиночку в своем гараже. И если вы думаете о количестве строк кода в Windows, может быть, мистер Билл имел в виду это иначе, чем это обычно воспринимается ...?
UnconditionallyReinstateMonica 13.05.2010 14:31:39
Похоже, что ни один из них не применим к Visual Studio 2010, и ссылка slickedit не работает.
MGOwen 29.06.2011 01:42:34
Вы найдете функцию LOC в Visual Studio 2010 Ultimate в разделе «Анализ> Метрики кода». Надеюсь, я правильно ее перевел. У меня есть немецкая версия. Там это «Анализ»> «Codemetriken berechnen»
OneWorld 16.03.2012 19:08:45
для Visual Studio 2012 метрику LoC можно найти в разделе АНАЛИЗ> Рассчитать метрики кода для решения
tetri 17.12.2013 17:08:50
Кроме того, VS2012 включает эту функцию в версиях Ultimate и Premium (а теперь и в Professional).
SWalters - Reinstate Monica 17.12.2013 17:09:43

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

19
7.08.2009 13:51:25
Visual Studio Team System 2008 не умеет считать неуправляемый код. ;)
Christian 3.02.2010 14:29:20

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

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

839
6.10.2016 16:42:39
(Единственный раз, когда меня попросили указать количество строк, когда высшее руководство выясняло, сколько времени потребуется, чтобы перенести все наши продукты за границу, чтобы они могли закрыть наш внутренний сайт.)
Greg D 7.08.2009 14:33:16
(Да, это включает в себя файлы и комментарии codegen. Нет, это меня не беспокоит. Дизайнеры, ген код и комментарии также должны быть сохранены.)
Greg D 10.08.2009 14:20:34
очень красиво, совсем забыл про powershell. он должен стать заменой по умолчанию для cmd
lubos hasko 17.01.2010 14:40:54
Отлично! Ваш заключительный комментарий действительно подводит итог, это тривиальная задача, так зачем использовать нетривиальный инструмент? Хотя я действительно думаю, что это должно быть включено во все версии VS.
Sune Rievers 1.10.2010 09:22:20
Если вы хотите исключить файлы поддержки, созданные для XAML, вы можете просто добавить ключ -exclude: (dir -exclude *.g.cs -include *.cs,*.xaml -recurse | select-string .).Count
E.Z. Hart 4.02.2014 15:03:23

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

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

Вот пример вывода с их веб-страницы:

подскажите> cloc perl-5.10.0.tar.gz
    4076 текстовых файлов.
    3883 уникальных файла.                                          
    1521 файлов игнорируется.

http://cloc.sourceforge.net v 1,07 T = 10,0 с (251,0 файлов / с, 84566,5 строк / с)
-------------------------------------------------- -----------------------------
Языковые файлы пустые, код комментария масштаб 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
Bourne Shell 116 3402 5789 36882 x 3,81 = 140520,42
Лисп 1 684 2242 7515 х 1,25 = 9393,75
сделать 7 498 473 2044 х 2,50 = 5110,00
С ++ 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
-------------------------------------------------- -----------------------------
Сумма: 2510 142085 156406 547174 x 2,84 = 1556285,03
-------------------------------------------------- -----------------------------

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

64
29.07.2016 12:52:26
Это здорово и супер просто в использовании. Гораздо проще, чем решения «Найти / Заменить», и более ясно, что он делает на самом деле, чем опция VS Code Metrics. Как раз choco install clocи тогда cloc .в вашем решении реж. Работа выполнена!
Rory 29.07.2016 12:50:12
Я загрузил Windows EXE- файл с веб-сайта CLOC и запустил его в папке проекта моего веб-сайта Visual Studio 2017. Работал как шарм. Мне нравится опция --by-file-by-lang, которая перечисляет количество строк для каждого отдельного файла и языка с сортировкой от наибольшего к наименьшему.
humbads 29.03.2018 18:25:09

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

3
17.01.2010 14:34:29

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

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

80
28.02.2010 14:27:54
Мне нравится этот, но я думаю, что нашел в этом выражении небольшую ошибку. Для VB.Net я думаю, что это должно быть ^ ~ (: Wh @ ') ~ (: Wh @ \ #). +, А для C # я думаю ^ ~ (: Wh @ //) ~ (: Wh @ \ {: Wh @) ~ (: Wh @ \}: Wh @) ~ (: Wh @ \ #). + Таким образом, чистые строки комментариев и директивы компилятора обрабатываются правильно. В любом случае, с VB.NET у меня получалось лучше, а C # я не тестировал.
user12861 3.08.2011 14:33:20
^ ~ (: Wh @ //) ~ (: Wh @ \ {: Wh @) ~ (: Wh @ \}: Wh @) ~ (: Wh @ \ #) ~ (: Wh @ $). + Закончилось работая лучше для C #, я получал несколько строк, состоящих только из пробелов.
user12861 5.08.2011 14:23:44
Разве он не учитывает все закомментированные строки? Просто строки кода, пожалуйста!
HydPhani 15.04.2013 07:44:37
Вот тот, который я написал, который работает в VS2012 (опубликованный устарел по состоянию на 2010 год) и учитывает только строки кода. Он исключает все комментарии, используя директивы, фигурные скобки, директивы xml, пустые строки и т. Д ...., чтобы дать вам истинный счетчик только кода: ^ (?! (\ S **)) (?! (\ S * \) - \ -?! \>)) ((\ s * \ <\ \ - \ -?!?!)) ((\ s * \ п)) ((\ s ** \ /)) (?! (\ s * \ / *)) (?! (\ s * \ / \ / \ /)) (?! (\ s * \ / \ /)) (?! (\ s * \})) (? ! (\ s * \ {)) (?! (\ s (использующий))). * $
Howard Renollet 4.11.2013 17:43:21

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

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

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

Ссылка:

11
20.06.2011 01:40:58

Я предпочитаю OxyProject Metrics VS Addin.

5
13.05.2010 14:00:33

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

0
13.05.2010 14:07:42

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

1
4.06.2011 07:44:21

Используйте Меню-> Анализировать -> Рассчитать метрики кода в Visual Studio 2010 Ultimate.

3
11.07.2011 22:14:33

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

Сценарий можно найти здесь:

https://gist.github.com/1674457

1
25.01.2012 03:18:08

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

344
18.11.2014 16:33:09
Это решение неправильно содержит пустые строки, комментарии, документацию и разделенные операторы. Для многих приложений они не должны учитываться как строки кода.
Jay Baxter 26.03.2014 22:32:04
Хотя это немного неточно (если вы на самом деле используете \ n в своем коде, эта строка будет отсчитана дважды), это все равно будет лучшим ответом, если вам нужен ROM строк кода без стороннего инструмента
Joseph Duty 20.08.2015 13:32:00
Вы также можете выбрать определенный тип файла, выбрав Look at these file types:раскрывающийся список опций ниже enable regular expressions box.
Moshii 24.10.2015 18:35:44
Работает для очень маленьких проектов ... когда у вас есть 100 миллионов строк кода, это займет некоторое время.
marsh 16.05.2016 18:18:55
[^\n\s]\r\nпропускает пустые строки, даже с пробелами в них.
Zach Mierzejewski 17.04.2018 16:26:44

Согласиться с Али Парр. Дополнение WndTab Line Counter является таким инструментом. http://www.codeproject.com/KB/macros/linecount.aspx

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

2
11.03.2012 01:21:27

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

В него встроено множество утилит, включая счетчик строк, который сообщает, сколько строк пустое, код и т. Д.

17
17.06.2015 10:07:31
Также есть версия для VS 2012
Philipp M 17.06.2015 11:03:10

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

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

Просто щелкните правой кнопкой мыши на решении или проекте в Solution Explorer,

введите описание изображения здесь

и выберите «Рассчитать метрики»

введите описание изображения здесь

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

42
14.11.2012 18:02:07
Visual Studio 2010 также имеет эту метрику. На самом деле ничего нового в VS2012 нет.
Mike Chaliy 14.11.2012 11:03:02
Да, но ответы здесь относятся ко времени против 2008 года и немного устарели, зачем использовать что-либо или устанавливать какое-либо расширение, если это встроенная функция. И даже это не новая функция, о которой многие люди не знают.
Regfor 14.11.2012 11:42:14
@MikeChaliy Может быть, второе вступительное предложение сбило вас с толку, поэтому я немного переписал его, чтобы избежать такой путаницы.
Regfor 14.11.2012 11:49:38
У меня есть n-слойное решение, но оно отображает эту ошибку: «Исключение было сгенерировано целью вызова». Почему?
user197508 16.11.2012 18:38:53
Это не строки кода, а скомпилированные строки (т. Е. После преобразования в IL). Я думаю, что Фермин искал предварительно скомпилированные строки.
mikeschuld 19.04.2013 01:48:54

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

Этот скрипт находит все ссылки .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}
4
22.05.2013 09:05:24

Вот хитрость .. Он также считает файл Js.

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

2
22.05.2013 09:49:07

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

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

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

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

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

^~(:Wh@//.+)~(:Wh@\{:Wh@)~(:Wh@\}:Wh@)~(:Wh@/#).+
29
17.06.2015 10:24:07

Вот обновление для 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 */

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

79
8.09.2016 12:38:56
Люблю downvote без комментариев. Это не должно быть разрешено. Что насчет моего решения не работает ??? Меня не волнуют голоса, я просто хотел опубликовать обновление для пользователей VS2012-2013.
Howard Renollet 20.02.2014 13:33:18
Трудно отфильтровать весь сгенерированный код (AssemblyInfo и т. Д.), Поэтому предпочтение следует отдавать метрикам анализа / расчета кода.
MKesper 22.01.2016 09:56:30
Отличная работа, но, пожалуйста, отметьте флажок « Использовать регулярное выражение» в разделе « Параметры поиска ». Это делает его гораздо проще
Gogutz 16.04.2016 18:40:48
@MKesper, НО ЭТО НЕ РАБОТАЕТ ДЛЯ C ++
d7samurai 22.03.2017 14:46:03
Более простая версия, если нет ни XML, ни HTML ... ^ (? ([^ \ R \ n]) \ s) * [^ \ s +? /] + [^ \ N] * $.
LastBlow 7.06.2018 16:53:18

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

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

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

2
8.04.2014 07:16:01

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

3
15.04.2014 18:55:43

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

0
28.01.2017 22:45:56