您可以透過三種方式產生程式代碼計量資料:
啟用 .NET 程式代碼品質分析器 ,並啟用它所包含的四個程式代碼計量(可維護性)規則。
在 Visual Studio 中選擇 [分析>計算程式代碼度量] 選單命令。
從 C# 和 Visual Basic 專案的 命令行 。
.NET 程式代碼品質分析器程式代碼計量規則
.NET 程式代碼品質分析器包含數個程式代碼計量 分析器 規則:
預設會停用這些規則,但您可以從 方案總管 或在 EditorConfig 檔案中啟用。 例如,若要將 CA1502 規則設定為警告,您的 EditorConfig 檔案會包含以下項目:
dotnet_diagnostic.CA1502.severity = warning
設定
您可以設定程式代碼計量規則引發的臨界值。
建立文字檔。 例如,您可以將它命名 CodeMetricsConfig.txt。
以下列格式將所需的臨界值新增至文字檔:
CA1502: 10
在此範例中,當方法的旋迴複雜度大於 10 時,規則 CA1502 已設定為觸發。
在 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 為與舊版工具相同的一組方法類型產生程式代碼計量。 例如,它不會為欄位和屬性的初始化生成程式的度量數據。 Legacy模式適用於向後相容性,或者如果您有以程式碼度量數值為基礎的程式碼簽入門檻。 在舊版模式下執行建置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
,使用與舊版 Metrics.exe 相同的公式,但新的工具會計算 IOperations
(邏輯來源指令)的數目,而不是中繼語言(IL)指令。 這些數位會與Visual Studio IDE和舊版 Metrics.exe所產生的數位稍有不同。