共用方式為


產生程式代碼計量數據

您可以透過三種方式產生程式代碼計量資料:

.NET 程式代碼品質分析器程式代碼計量規則

.NET 程式代碼品質分析器包含數個程式代碼計量 分析器 規則:

預設會停用這些規則,但您可以從 方案總管 或在 EditorConfig 檔案中啟用。 例如,若要將 CA1502 規則設定為警告,您的 EditorConfig 檔案會包含以下項目:

dotnet_diagnostic.CA1502.severity = warning

設定

您可以設定程式代碼計量規則引發的臨界值。

  1. 建立文字檔。 例如,您可以將它命名 CodeMetricsConfig.txt

  2. 以下列格式將所需的臨界值新增至文字檔:

    CA1502: 10
    

    在此範例中,當方法的旋迴複雜度大於 10 時,規則 CA1502 已設定為觸發。

  3. 在 Visual Studio 的 [ 屬性 ] 視窗中,或在項目檔中,將組態檔的建置動作標示為 AdditionalFiles。 例如:

    <ItemGroup>
      <AdditionalFiles Include="CodeMetricsConfig.txt" />
    </ItemGroup>
    

程式碼度量計算功能表命令

使用 [ 分析>計算程序代碼計量 ] 功能表,為 IDE 中的一或所有開啟專案產生程式代碼計量。

產生整個解決方案的程式代碼計量結果

您可以透過下列任何方式,為整個解決方案產生程式代碼計量結果:

  • 從功能表列,選取 [分析>計算程式碼度量>的解決方案]。

  • [方案總管] 中,以滑鼠右鍵按兩下方案,然後選取 [計算程式代碼計量]。

  • 在 [ 程序代碼計量結果] 視窗中,選取 [ 計算方案的程式代碼計量 ] 按鈕。

會產生結果,並顯示 [ 程序代碼計量結果 ] 視窗。 若要檢視結果詳細數據,請展開 階層 欄中的樹狀結構。

產生一或多個專案的程式代碼計量結果

  1. [方案總管] 中,選取一或多個專案。

  2. 從功能表欄中選取 [分析>計算程式碼度量>針對選取的專案]。

會產生結果,並顯示 [ 程序代碼計量結果 ] 視窗。 若要檢視結果詳細數據,請展開 [階層] 中的樹狀結構。

指令行程式碼計量

您可以從適用於 .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 可執行檔:

  1. 複製 dotnet/roslyn-analyzers 存放庫。

  2. 以系統管理員身分開啟 Visual Studio 的開發人員命令提示字元。

  3. roslyn-analyzers 存放庫的根目錄中,執行下列命令: Restore.cmd

  4. 將目錄變更為 src\Tools\Metrics

  5. 執行下列命令來建置 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) 開始, SourceLinesExecutableLines 取代先前 LinesOfCode 的計量。 如需新計量的描述,請參閱 程式代碼計量值。 計量 LinesOfCode 可在舊版模式中使用。

其他度量,例如 CyclomaticComplexityMaintainabilityIndex,使用與舊版 Metrics.exe 相同的公式,但新的工具會計算 IOperations(邏輯來源指令)的數目,而不是中繼語言(IL)指令。 這些數位會與Visual Studio IDE和舊版 Metrics.exe所產生的數位稍有不同。