다음 세 가지 방법으로 코드 메트릭 데이터를 생성할 수 있습니다.
.NET 코드 품질 분석기를 사용하도록 설정하고 포함된 4개의 코드 메트릭(유지 관리 가능성) 규칙을 사용하도록 설정합니다.
Visual Studio 내에서 > 메뉴 명령을 선택합니다.
C# 및 Visual Basic 프로젝트에 대한 명령줄 에서
.NET 코드 품질 분석기 코드 메트릭 규칙
.NET 코드 품질 분석기는 다음과 같은 여러 코드 메트릭 분석기 규칙을 포함합니다.
이러한 규칙은 기본적으로 사용하지 않도록 설정되지만 솔루션 탐색기 또는 EditorConfig 파일에서 사용하도록 설정할 수 있습니다. 예를 들어 규칙 CA1502를 경고로 사용하도록 설정하려면 EditorConfig 파일에 다음 항목이 포함 됩니다.
dotnet_diagnostic.CA1502.severity = warning
구성 / 설정
코드 메트릭 규칙이 적용되는 임계값을 구성할 수 있습니다.
텍스트 파일을 만듭니다. 예를 들어 이름을 CodeMetricsConfig.txt수 있습니다.
텍스트 파일에 원하는 임계값을 다음 형식으로 추가합니다.
CA1502: 10
이 예제에서 규칙 CA1502 는 메서드의 순환 복잡성이 10보다 클 때 실행되도록 구성됩니다.
Visual Studio의 속성 창 또는 프로젝트 파일에서 구성 파일의 빌드 작업을 AdditionalFiles로 표시합니다. 다음은 그 예입니다.
<ItemGroup> <AdditionalFiles Include="CodeMetricsConfig.txt" /> </ItemGroup>
코드 메트릭 계산 메뉴 명령
코드 메트릭 분석 메뉴를 사용하여 > IDE에서 열려 있는 프로젝트 중 하나 또는 모두에 대한코드 메트릭을 생성합니다.
전체 솔루션에 대한 코드 메트릭 결과 생성
다음과 같은 방법으로 전체 솔루션에 대한 코드 메트릭 결과를 생성할 수 있습니다.
메뉴 모음에서 분석>코드 메트릭 계산>솔루션에 대하여를 선택합니다.
솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭한 다음 코드 메트릭 계산을 선택합니다.
코드 메트릭 결과 창에서 솔루션에 대한 코드 메트릭 계산 단추를 선택합니다.
결과가 생성되고 코드 메트릭 결과 창이 표시됩니다. 결과 세부 정보를 보려면 계층 구조 열의 트리를 확장합니다.
하나 이상의 프로젝트에 대한 코드 메트릭 결과 생성
솔루션 탐색기에서 하나 이상의 프로젝트를 선택합니다.
메뉴 모음에서선택한 프로젝트에 대한> 계산 >.
결과가 생성되고 코드 메트릭 결과 창이 표시됩니다. 결과 세부 정보를 보려면 계층 구조에서 트리를 확장 합니다.
명령줄 코드 메트릭
.NET Framework, .NET Core 및 .NET Standard 앱용 C# 및 Visual Basic 프로젝트에 대한 명령줄에서 코드 메트릭 데이터를 생성할 수 있습니다. 명령줄에서 코드 메트릭을 실행하려면 Microsoft.CodeAnalysis.Metrics NuGet 패키지를 설치하거나 Metrics.exe 실행 파일을 직접 빌드합니다.
Microsoft.CodeAnalysis.Metrics NuGet 패키지
명령줄에서 코드 메트릭 데이터를 생성하는 가장 쉬운 방법은 Microsoft.CodeAnalysis.Metrics NuGet 패키지를 설치하는 것입니다. 패키지를 설치한 후 프로젝트 파일이 포함된 디렉터리에서 실행 msbuild /t:Metrics
합니다. 다음은 그 예입니다.
C:\source\repos\ClassLibrary3\ClassLibrary3>msbuild /t:Metrics
Microsoft (R) Build Engine version 16.0.360-preview+g9781d96883 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 1/22/2019 4:29:57 PM.
Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" on node 1 (Metrics target(s))
.
Metrics:
C:\source\repos\ClassLibrary3\packages\Microsoft.CodeMetrics.2.6.4-ci\build\\..\Metrics\Metrics.exe /project:C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj /out:ClassLibrary3.Metrics.xml
Loading ClassLibrary3.csproj...
Computing code metrics for ClassLibrary3.csproj...
Writing output to 'ClassLibrary3.Metrics.xml'...
Completed Successfully.
Done Building Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" (Metrics target(s)).
Build succeeded.
0 Warning(s)
0 Error(s)
를 지정하여 출력 파일 이름을 재정의할 수 있습니다 /p:MetricsOutputFile=<filename>
. 를 지정하여 레거시 스타일 코드 메트릭 데이터를 가져올 수도 있습니다 /p:LEGACY_CODE_METRICS_MODE=true
. 다음은 그 예입니다.
C:\source\repos\ClassLibrary3\ClassLibrary3>msbuild /t:Metrics /p:LEGACY_CODE_METRICS_MODE=true /p:MetricsOutputFile="Legacy.xml"
Microsoft (R) Build Engine version 16.0.360-preview+g9781d96883 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 1/22/2019 4:31:00 PM.
The "MetricsOutputFile" property is a global property, and cannot be modified.
Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" on node 1 (Metrics target(s))
.
Metrics:
C:\source\repos\ClassLibrary3\packages\Microsoft.CodeMetrics.2.6.4-ci\build\\..\Metrics.Legacy\Metrics.Legacy.exe /project:C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj /out:Legacy.xml
Loading ClassLibrary3.csproj...
Computing code metrics for ClassLibrary3.csproj...
Writing output to 'Legacy.xml'...
Completed Successfully.
Done Building Project "C:\source\repos\ClassLibrary3\ClassLibrary3\ClassLibrary3.csproj" (Metrics target(s)).
Build succeeded.
0 Warning(s)
0 Error(s)
코드 메트릭 출력
생성된 XML 출력은 다음 형식을 사용합니다.
<?xml version="1.0" encoding="utf-8"?>
<CodeMetricsReport Version="1.0">
<Targets>
<Target Name="ConsoleApp20.csproj">
<Assembly Name="ConsoleApp20, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<Metrics>
<Metric Name="MaintainabilityIndex" Value="100" />
<Metric Name="CyclomaticComplexity" Value="1" />
<Metric Name="ClassCoupling" Value="1" />
<Metric Name="DepthOfInheritance" Value="1" />
<Metric Name="SourceLines" Value="11" />
<Metric Name="ExecutableLines" Value="1" />
</Metrics>
<Namespaces>
<Namespace Name="ConsoleApp20">
<Metrics>
<Metric Name="MaintainabilityIndex" Value="100" />
<Metric Name="CyclomaticComplexity" Value="1" />
<Metric Name="ClassCoupling" Value="1" />
<Metric Name="DepthOfInheritance" Value="1" />
<Metric Name="SourceLines" Value="11" />
<Metric Name="ExecutableLines" Value="1" />
</Metrics>
<Types>
<NamedType Name="Program">
<Metrics>
<Metric Name="MaintainabilityIndex" Value="100" />
<Metric Name="CyclomaticComplexity" Value="1" />
<Metric Name="ClassCoupling" Value="1" />
<Metric Name="DepthOfInheritance" Value="1" />
<Metric Name="SourceLines" Value="7" />
<Metric Name="ExecutableLines" Value="1" />
</Metrics>
<Members>
<Method Name="void Program.Main(string[] args)" File="C:\source\repos\ConsoleApp20\ConsoleApp20\Program.cs" Line="7">
<Metrics>
<Metric Name="MaintainabilityIndex" Value="100" />
<Metric Name="CyclomaticComplexity" Value="1" />
<Metric Name="ClassCoupling" Value="1" />
<Metric Name="SourceLines" Value="4" />
<Metric Name="ExecutableLines" Value="1" />
</Metrics>
</Method>
</Members>
</NamedType>
</Types>
</Namespace>
</Namespaces>
</Assembly>
</Target>
</Targets>
</CodeMetricsReport>
Metrics.exe
NuGet 패키지를 설치하지 않으려면 Metrics.exe 실행 파일을 직접 생성하고 사용할 수 있습니다. Metrics.exe 실행 파일을 생성하려면 다음을 수행합니다.
dotnet/roslyn-analyzers 리포지토리를 복제합니다.
관리자 권한으로 Visual Studio용 개발자 명령 프롬프트를 엽니다.
roslyn-analyzers 리포지토리의 루트에서 다음 명령을 실행합니다.
Restore.cmd
디렉터리를 src\Tools\Metrics로 변경합니다.
다음 명령을 실행하여 Metrics.csproj 프로젝트를 빌드합니다.
msbuild /m /v:m /p:Configuration=Release Metrics.csproj
Metrics.exe 명명된 실행 파일은 리포지토리 루트 아래의 artifacts\bin 디렉터리에 생성됩니다.
Metrics.exe 사용량
Metrics.exe실행하려면 프로젝트 또는 솔루션과 출력 XML 파일을 인수로 제공합니다. 다음은 그 예입니다.
C:\>Metrics.exe /project:ConsoleApp20.csproj /out:report.xml
Loading ConsoleApp20.csproj...
Computing code metrics for ConsoleApp20.csproj...
Writing output to 'report.xml'...
Completed Successfully.
레거시 모드
레거시 모드에서 Metrics.exe 빌드하도록 선택할 수 있습니다. 도구의 레거시 모드 버전은 도구의 이전 버전에 더 가까운 메트릭 값을 생성합니다. 또한 레거시 모드에서 Metrics.exe 이전 버전의 도구에서 코드 메트릭을 생성한 것과 동일한 메서드 형식 집합에 대한 코드 메트릭을 생성합니다. 예를 들어 필드 및 속성 이니셜라이저에 대한 코드 메트릭 데이터를 생성하지 않습니다. 레거시 모드는 이전 버전과의 호환성 또는 코드 메트릭 번호를 기반으로 하는 코드 체크 인 게이트가 있는 경우에 유용합니다. 레거시 모드에서 Metrics.exe 빌드하는 명령은 다음과 같습니다.
msbuild /m /v:m /t:rebuild /p:LEGACY_CODE_METRICS_MODE=true Metrics.csproj
자세한 내용은 레거시 모드에서 코드 메트릭 생성 사용을 참조하세요.
이전 버전
Visual Studio 2015에는 Metrics.exe라고도 하는 명령줄 코드 메트릭 도구가 포함되어 있습니다. 이 이전 버전의 도구는 어셈블리 기반 분석인 이진 분석을 수행했습니다. 최신 버전의 Metrics.exe 도구는 대신 소스 코드를 분석합니다. 최신 Metrics.exe 도구는 소스 코드 기반이므로 명령줄 코드 메트릭 결과는 Visual Studio IDE 및 이전 버전의 Metrics.exe의해 생성된 결과와 다를 수 있습니다. Visual Studio 2019부터 Visual Studio IDE는 명령줄 도구와 같은 소스 코드를 분석하며 결과는 동일해야 합니다.
새 명령줄 코드 메트릭 도구는 솔루션과 프로젝트를 로드할 수 있는 한 소스 코드 오류가 있는 경우에도 메트릭을 계산합니다.
메트릭 값 차이
Visual Studio 2019 버전 16.4 및 Microsoft.CodeAnalysis.Metrics(2.9.5)부터 SourceLines
와 ExecutableLines
가 이전 LinesOfCode
메트릭을 대신합니다. 새 메트릭에 대한 설명은 코드 메트릭 값을 참조하세요. 메트릭은 LinesOfCode
레거시 모드에서 사용할 수 있습니다.
새로운 도구는 CyclomaticComplexity
이전 버전과 동일한 수식을 다른 메트릭인 MaintainabilityIndex
및 에도 사용하지만, IL(중간 언어) 명령 대신 논리 소스 명령의 개수인 IOperations
의 수를 계산합니다. 숫자는 Visual Studio IDE 및 이전 버전의 Metrics.exe의해 생성된 숫자와 약간 다릅니다.