Visual Studio 솔루션에서 코드 줄을 어떻게 계산합니까?


800

전체 솔루션에서 코드 줄 수를 찾을 수 있습니까? MZ-Tools에 대해 들었지만 오픈 소스에 해당하는 것이 있습니까?


24
나는 그것이 큰 도움이되지 않는다는 데 동의하지만 경영진이 요구한다면 ...
Fermin

33
LoC는 단순히 측정 기준이며 다음과 같은 두 가지 경우에 부분적으로 삽입됩니다. 1) 새로운 팀에 합류 할 때 코드 기반이 얼마나 큰지 알기 위해 2) 코드 기반을 더 간결하게 만들 때 진행 상황을 측정합니다
Piotr Owsiak

191
일부 사람들은 코드 줄을 세는 것은 좋은 생각을하지 않으면 쓸모가 없다고 말합니다. 일반적으로 최소화해야하는 메트릭이므로 매우 유용합니다. 솔루션의 복잡성을 측정하는 간단한 방법 (효율이 아님)이며 문제가 단순하다고 알려진 경우 코드 줄이 많을수록 일반적으로 품질이 떨어집니다. 또 다른 문제는 사람들이 단지 질문이 나쁜 것이라고 말하는 것만으로도 사람들이 응답하는 것을 귀찮게하는 이유는 무엇입니까? 선생님이 당신에게 질문을해서는 안된다고 생각하면 어떻게 될까요?

77
VS2010에는 모든 코드 줄과 다른 값도 계산하는 내장 도구가 있습니다.보기-> 기타 창-> 코드 메트릭 결과로 이동하십시오. 모퉁이에 달력처럼 보이는 작은 버튼을 클릭하면 툴팁에 soulution에 대한 코드 메트릭 계산이라고 말하고 VS가 그 일을하도록하십시오.
user959631

64
그 사람이 왜 코드를 세고 싶어하는지 항상 말해 줄 필요는 없습니다. 이 질문이 단순히 언급되면, 왜 관련이 없는가에 관한 사건입니다. 그의 질문에 답하십시오. 나는 그것을 싫어한다. 왜 당신이 명확하게 필요할 때 그리고 당신이 원하지 않는 시간이 있는지 물어볼 시간이 있습니다 (개인적으로 필요를 보지 못했을 때 ... 그리고 오만에 포스터를 휘두르는 경우).
PositiveGuy

답변:


524

Visual Studio 2010 Ultimate에는 다음과 같은 기본 제공 기능이 있습니다.

분석 → 코드 메트릭 계산


12
Ultimate and Premium, 제 생각에는
Stefan Dragnev

39
경고 : 이것은 단순히 라인 수 외에 다른 많은 기능을 수행합니다. 또한 "유지 관리 성 지수", "사이클로 틱 복잡도", "상속 깊이"및 "클래스 커플 링"도 나열되어 있으며 계산이 매우 복잡하기 때문에 그 일부에 대해서만 메트릭을 실행할 수 없습니다. 이것이 의미하는 바는 코드베이스가 특히 큰 경우 몇 시간 동안 기다릴 수 있다는 것입니다. 원하는 것이 줄 수이면 훨씬 빠른 솔루션이 있습니다.
대럴 호프만

4
또한 vs2012 궁극 =)에
oCcSking

9
VS 2013에는 분석-> 코드 메트릭 계산
Dinesh Rajan이

42
너무 나쁜 것은 네이티브 C ++ 프로젝트에서 작동하지 않습니다 (적어도 VS2013에서는 작동하지 않음).
Cameron

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
(예, 여기에는 codegendd 파일과 주석이 포함됩니다. 아니오, 그것은 귀찮게하지 않습니다. 디자이너, gend 코드 및 주석도 유지되어야합니다.)
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 Hart

348

나는 Ctrl+ Shift+를 사용했다 F. 그런 다음 \n검색 창 에 a 를 입력하고 정규식 상자를 활성화합니다. 그런 다음 찾기 결과에서 화면 끝에 검색된 파일 수와 코드 줄이 있습니다.

[^\n\s]\r\n공백 및 공백 전용 줄을 건너 뛰는 데 사용할 수 있습니다 (주석에서 Zach의 크레딧).


16
이 솔루션에는 빈 줄, 주석, 설명서 및 분할 문이 잘못 포함되어 있습니다. 많은 응용 프로그램의 경우 코드 줄로 계산해서는 안됩니다.
Jay Baxter

1
약간 정확하지는 않지만 (코드에 실제로 \ n을 사용하는 경우 해당 행은 두 번 계산됩니다.) 타사 도구없이 코드 행의 ROM이 필요한 경우 여전히 가장 좋은 답변입니다.
Joseph Duty

1
Look at these file types:아래의 옵션 드롭 다운을 선택하여 특정 파일 형식을 선택할 수도 있습니다 enable regular expressions box.
Moshii

1
매우 작은 프로젝트에서 작동합니다. 1 억 줄의 코드가 있으면 시간이 좀 걸립니다.
marsh

10
[^\n\s]\r\n공백이 있어도 빈 줄을 건너 뜁니다.
Zach Mierzejewski

219

VS2005, 2003 및 2002의 오픈 소스 라인 카운터는 다음에서 제공됩니다.

http://www.wndtabs.com/

Codeproject의 코드로 완성 된 라인 카운팅 VS addin 생성에 대한 토론도 있습니다.

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

또한 매끄러운 편집 가제트에는 멋진 라인 카운터가 있습니다.

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

Microsoft Visual Studio Team System 2008에는 우수한 라인 카운터가 포함되어 있습니다.

그래도 기억하십시오 :

코드 라인별로 프로그래밍 진행률을 측정하는 것은 무게로 항공기 건물 진행률을 측정하는 것과 같습니다. 빌 게이츠


1
종종 코드 라인을 계산하는 것은 Just Plain Silly이며 수량은 품질을 의미하지 않습니다. 그러나 545,000 lb (545,000 lb !!) Dreamliner를 공중에 올리는 거대한 팀은 내가 직접 차고에서 한 손으로 만든 초경량을 발사하는 것과는 완전히 다른 성과입니다. 그리고 Windows의 코드 줄 수에 대해 생각한다면 Bill 씨는 일반적으로 사용되는 것과 다른 방식으로 이것을 의미했을 것입니다 ...?
무조건

18
이들 중 어느 것도 Visual Studio 2010에 적용되는 것 같지 않으며 slickedit 링크가 끊어졌습니다.
MGOwen

57
Visual Studio 2010 Ultimate의 "분석> 코드 메트릭" 에서 LOC 기능을 찾을 수 있습니다. 독일어 버전이 있습니다. "분석"> "Codemetriken berechnen"
OneWorld

2
Visual Studio 2012의 경우 LoC 메트릭은 ANALYZE> 솔루션의 코드 메트릭 계산
tetri

2
또한 VS2012에는 Ultimate 및 Premium 버전 (현재 Professional)에도이 기능이 포함되어 있습니다.
SWalters-복원 Monica Monica

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
의견없이 downvote를 사랑하십시오. 허용되지 않아야합니다. 내 솔루션은 어떻습니까 ??? 나는 투표에 신경 쓰지 않고 VS2012-2013 사용자를 위해 업데이트를 게시하고 싶었습니다.
Howard Renollet

생성 된 모든 코드 (AssemblyInfo 등)를 필터링하기 어렵 기 때문에 코드 메트릭 분석 / 계산이 선호됩니다.
MKesper

4
훌륭하지만 찾기 옵션 섹션 에서 정규 표현식 사용 확인란에 대해 언급 하십시오. 훨씬 쉬워집니다
Gogutz

@MKesper 그러나 C ++에서 작동하지 않는
d7samurai

XML이나 HTML이없는 경우 더 간단한 버전 ... ^ (? ([^ \ r \ n]) \ s) * [^ \ s +? /] + [^ \ n] * $.
LastBlow

80

이 팁을 찾았습니다. LOC with VS 찾기 및 바꾸기

당신이 찾고있는 것이지만 플러그인이 아닙니다.


나는 이것을 좋아하지만, 표현에서 작은 오류를 발견했다고 생각합니다. VB.Net의 경우 ^ ~ (: Wh @ ') ~ (: Wh @ \ #). +이고 C #의 경우 ^ ~ (: Wh @ //) ~ (: Wh @ \ {: Wh @) ~ (: Wh @ \} : Wh @) ~ (: Wh @ \ #). + 빈 주석 행과 컴파일러 지시문이 올바르게 처리됩니다. 어쨌든 VB.NET에서 더 잘 작동했으며 C #은 테스트하지 않았습니다.
user12861

^ ~ (: Wh @ //) ~ (: Wh @ \ {: Wh @) ~ (: Wh @ \} : Wh @) ~ (: Wh @ \ #) ~ (: Wh @ $). + C #에서 더 잘 작동하면 공백으로 구성된 줄이 생겼습니다.
user12861

주석 처리 된 모든 줄도 계산하지 않습니까? 코드 줄만주세요!
HydPhani

4
다음은 VS2012에서 작동하는 것으로 게시 한 내용이며 (게시 된 내용은 2010 년 현재 구식입니다) 코드 줄만 계산합니다. 지시문, 중괄호, xml 지시문, 빈 줄 등을 사용하여 모든 주석을 제외하고 진정한 코드 만 계산하십시오 : ^ (?! (\ s **)) (?! (\ s * \ -\-\>)) (?! (\ s * \ <\! \-\-)) (?! (\ s * \ n)) (?! (\ s ** \ /)) (?! (\ s * \ / *)) (?! (\ s * \ / \ / \ /)) (?! (\ s * \ / \ /)) (?! (\ s * \})) (? ! (\ s * \ {)) (?! (\ s (using))). * $
Howard Renollet

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 초 (251.0 파일 / 초, 84566.5 라인 / 초)
-------------------------------------------------- -----------------------------
언어 파일 빈 주석 코드 스케일 3 세대 equiv
-------------------------------------------------- -----------------------------
펄 2052 110356 112521 309778 x 4.00 = 1239112.00
C 135 18718 22862 140483 x 0.77 = 108171.91
C / C ++ 헤더 147 7650 1209344042 x 1.00 = 44042.00
Bourne Shell 116 3402 5789 36882 x 3.81 = 140520.42
리스프 1684 2242 7515 x 1.25 = 9393.75
7 498473 2044 x 2.50 = 5110.00 만들기
C ++ 1031277 2000 x 1.51 = 3020.00
XML 26231 1972 x 1.90 = 3746.80
yacc 2128 97 1549 x 1.51 = 2338.99
YAML 200 489 x 0.90 = 440.10
DOS 배치 11 85 50322 x 0.63 = 202.86
HTML 1 98 98 x 1.90 = 186.20
-------------------------------------------------- -----------------------------
합 : 2510 142085 156406547174 x 2.84 = 1556285.03
-------------------------------------------------- -----------------------------

3 세대 등가 척도는 3 세대 언어 에서 얼마나 많은 코드가 필요한지 대략적인 추정치입니다 . 별로 유용하지는 않지만 어쨌든 재미 있습니다.


1
이것은 훌륭하고 사용하기 쉽습니다. 찾기 / 바꾸기 솔루션보다 훨씬 쉽고 VS Code Metrics 옵션보다 실제로 수행중인 작업이 더 명확합니다. 그냥 choco install cloc다음 cloc .솔루션의 디렉토리입니다. 작업 완료!
Rory

1
CLOC 웹 사이트 에서 Windows EXE를 다운로드하여 Visual Studio 2017 웹 사이트 프로젝트 폴더에서 실행했습니다. 매력처럼 일했다. 개별 파일 및 언어별로 줄 수를 나열하는 --by-file-by-lang 옵션이 마음에 듭니다.
humbads

42

여기에 대한 답변은 약간 오래된 것입니다 .2008 년과 비교했을 수 있습니다. 최신 Visual Studio 버전 2010/2012에서는이 기능이 이미 내장되어 있습니다. 따라서 확장 기능이나 도구를 사용할 이유가 없습니다.

코드 줄 수를 계산하는 기능-지표 계산. 이를 통해 각 프로젝트 또는 솔루션에 대한 메트릭 (LOC, 유지 관리 인덱스, 순환 인덱스, 상속 심도)을 계산할 수 있습니다.

솔루션 탐색기에서 솔루션 또는 프로젝트를 마우스 오른쪽 버튼으로 클릭하면

여기에 이미지 설명을 입력하십시오

'계산 계산'을 선택하십시오.

여기에 이미지 설명을 입력하십시오

분석 및 집계에 대한 최신 데이터를 Excel로 가져올 수 있습니다. 또한 Excel에서는 생성 된 클래스 또는 기타 메트릭에서 노이즈를 필터링 할 수 있습니다. 코드 라인 LOC를 포함한 이러한 메트릭은 빌드 프로세스 중에 수집되어 빌드 보고서에 포함될 수 있습니다.


2
Visual Studio 2010에도이 메트릭이 있습니다. 실제로 VS2012에는 전혀 새로운 것이 없습니다.
Mike Chaliy

1
그러나 여기에 대한 답변은 2008 년 대부터 시작되었으며 약간 오래되었습니다. 왜냐하면 내장 기능 일 때 어떤 것을 사용하거나 확장 기능을 설치하는 이유는 무엇입니까? 그리고 많은 사람들이 그것에 대해 모르는 새로운 기능조차 아닙니다.
Regfor

@MikeChaliy 두 번째 소개 문장이 혼란 스러울 수 있으므로 혼란을 피하기 위해 약간 다시 작성했습니다.
Regfor

n- 계층 솔루션이 있지만 다음 오류가 표시됩니다. "호출 대상에서 예외가 발생했습니다." 왜?
user197508

5
이것은 코드 줄이 아니라 컴파일 된 줄입니다 (즉, IL로 바뀐 후). Fermin은 사전 컴파일 된 라인을 찾고 있다고 생각합니다.
mikeschul은

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은 관리되지 않는 코드를 계산하지 않습니다. ;)
Christian


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

Visual Studio 2010 Ultimate에서 메뉴-> 분석-> 코드 메트릭 계산 옵션을 사용하십시오.







1

폴더 구조에서 줄을 세는 빠르고 더러운 powershell 스크립트를 생각해 냈습니다. 다른 답변에서 참조 된 다른 도구와 거의 같은 기능은 아니지만 프로젝트 또는 솔루션에서 코드 파일의 크기를 서로 비교할 수 있으면 충분하다고 생각합니다.

스크립트는 여기에서 찾을 수 있습니다.

https://gist.github.com/1674457



0

Visual Studio 2015에서 분석 메뉴로 이동하여 "코드 메트릭 계산"을 선택하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.