Generieren von Codemetrikdaten

Codemetrikendaten können auf drei Arten generiert werden:

Codemetrikregeln für Analysetools für die Qualität von .NET-Code

Die Analysetools für die Qualität von .NET-Code umfassen mehrere Regeln für Analysetools für Codemetriken:

Diese Regeln sind standardmäßig deaktiviert, aber Sie können sie über Projektmappen-Explorer oder in einer EditorConfig-Datei aktivieren. Beispiel: Zur Aktivierung der Regel CA1502 als Warnung würde die EditorConfig-Datei den folgenden Eintrag enthalten:

dotnet_diagnostic.CA1502.severity = warning

Konfiguration

Sie können die Schwellenwerte konfigurieren, an denen die Codemetrikregeln ausgelöst werden.

  1. Erstellen einer Textdatei Sie können ihr beispielsweise den Namen CodeMetricsConfig.txt geben.

  2. Fügen Sie der Textdatei die gewünschten Schwellenwerte im folgenden Format hinzu:

    CA1502: 10
    

    In diesem Beispiel ist die Regel CA1502 so konfiguriert, dass sie ausgelöst wird, wenn die zyklomatische Komplexität einer Methode größer als 10 ist.

  3. Markieren Sie im Fenster Eigenschaften von Visual Studio oder in der Projektdatei die Buildaktion der Konfigurationsdatei als AdditionalFiles. Beispiel:

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

Menübefehl „Codemetrik berechnen“

Generieren Sie Codemetriken für mindestens eines der geöffneten Projekte in der IDE, indem Sie das Menü Analysieren>Codemetrik berechnen verwenden.

Generieren von Codemetrikergebnissen für eine gesamte Projektmappe

Sie können Codemetrikergebnisse für eine gesamte Projektmappe auf eine der folgenden Arten generieren:

  • Wählen Sie in der Menüleiste Analysieren>Codemetrik berechnen>Für Projektmappe berechnen aus.

  • Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, und wählen Sie Codemetrik berechnen aus.

  • Wählen Sie im Fenster Codemetrikergebnisse die Schaltfläche Codemetrik für Projektmappe berechnen aus.

Die Ergebnisse werden generiert, und das Fenster Codemetrikergebnisse wird angezeigt. Erweitern Sie die Struktur in der Spalte Hierarchie, um die Ergebnisdetails anzuzeigen.

Generieren von Codemetrikergebnissen für mindestens ein Projekt

  1. Wählen Sie in Projektmappen-Explorer mindestens ein Projekt aus.

  2. Wählen Sie in der Menüleiste Analysieren>Codemetrik berechnen>Für ausgewählte Projekte aus.

Die Ergebnisse werden generiert, und das Fenster Codemetrikergebnisse wird angezeigt. Erweitern Sie die Struktur in der Spalte Hierarchie, um die Ergebnisdetails anzuzeigen.

Generieren von Codemetriken über die Befehlszeile

Sie können Codemetrikdaten für C#- und Visual Basic-Projekte für .NET Framework-, .NET Core- und .NET Standard-Apps über die Befehlszeile generieren. Installieren Sie zur Ausführung von Codemetriken über die Befehlszeile das NuGet-Paket „Microsoft.CodeAnalysis.Metrics“, oder erstellen Sie selbst die ausführbare Datei Metrics.exe.

NuGet-Paket „Microsoft.CodeAnalysis.Metrics“

Die einfachste Möglichkeit zum Generieren von Codemetrikdaten über die Befehlszeile besteht darin, das NuGet-Paket Microsoft.CodeAnalysis.Metrics zu installieren. Nachdem Sie das Paket installiert haben, führen Sie msbuild /t:Metrics aus dem Verzeichnis aus, das die Projektdatei enthält. Beispiel:

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)

Sie können den Namen der Ausgabedatei überschreiben, indem Sie /p:MetricsOutputFile=<filename> angeben. Sie können auch Codemetrikdaten im Legacystil abrufen, indem Sie /p:LEGACY_CODE_METRICS_MODE=true angeben. Beispiel:

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)

Ausgabe von Codemetriken

Die generierte XML-Ausgabe hat das folgende Format:

<?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

Wenn Sie das NuGet-Paket nicht installieren möchten, können Sie die ausführbare Datei Metrics.exe direkt generieren und verwenden. So generieren Sie die ausführbare Datei Metrics.exe

  1. Klonen Sie das Repository dotnet/roslyn-analyzers.

  2. Öffnen Sie die Developer-Eingabeaufforderung für Visual Studio als Administrator.

  3. Führen Sie im Stamm des Repositorys roslyn-analyzers den folgenden Befehl aus: Restore.cmd.

  4. Wechseln Sie zu folgendem Verzeichnis: src\Tools\Metrics.

  5. Führen Sie den folgenden Befehl aus, um das Projekt Metrics.csproj zu erstellen.

    msbuild /m /v:m /p:Configuration=Release Metrics.csproj
    

    Eine ausführbare Datei mit der Bezeichnung Metrics.exe wird im Verzeichnis artifacts\bin unter dem Repositorystamm generiert.

Nutzung von Metrics.exe

Geben Sie zur Ausführung von Metrics.exe ein Projekt oder eine Projektmappe und eine XML-Ausgabedatei als Argumente an. Beispiel:

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.

Legacymodus

Sie können Metrics.exe im Legacymodus erstellen. Mit der Legacymodusversion des Tools werden Metrikwerte generiert, die näher an den Werten liegen, die von älteren Versionen des Tools generiert wurden. Darüber hinaus werden von Metrics.exe im Legacymodus Codemetriken für dieselben Methodentypen generiert, für die Codemetriken von früheren Versionen des Tools generiert wurden. Beispielsweise werden keine Codemetrikdaten für Feld- und Eigenschaftsinitialisierer generiert. Der Legacymodus ist nützlich für Abwärtskompatibilität oder für Code-Check-In-Gates basierend auf Codemetriknummern. Der Befehl zum Erstellen von Metrics.exe im Legacymodus lautet:

msbuild /m /v:m /t:rebuild /p:LEGACY_CODE_METRICS_MODE=true Metrics.csproj

Weitere Informationen finden Sie unter Aktivieren der Generierung von Codemetriken im Legacymodus.

Vorherige Versionen

Visual Studio 2015 enthielt ein Tool für Befehlszeilen-Codemetriken, das ebenfalls als Metrics.exe bezeichnet wurde. In dieser früheren Version des Tools wurde eine binäre Analyse durchgeführt, d. h. eine assemblybasierte Analyse. Von der neueren Version des Tools Metrics.exe wird stattdessen Quellcode analysiert. Da das neuere Tool Metrics.exe quellcodebasiert ist, können sich die Ergebnisse der Befehlszeilen-Codemetriken von denen unterscheiden, die von der Visual Studio-IDE und früheren Versionen von Metrics.exe generiert werden. Ab Visual Studio 2019 wird Quellcode von der Visual Studio-IDE so analysiert wie vom Befehlszeilentool, und die Ergebnisse sollten identisch sein.

Vom neuen Befehlszeilentool für Codemetriken werden Metriken selbst bei Quellcodefehlern berechnet, sofern Projektmappe und Projekt geladen werden können.

Metrikwertunterschiede

Ab Visual Studio 2019, Version 16.4, und Microsoft.CodeAnalysis.Metrics (2.9.5) wird die vorherige Metrik LinesOfCode durch SourceLines und ExecutableLines ersetzt. Beschreibungen der neuen Metriken finden Sie unter Codemetrikwerte. Die Metrik LinesOfCode ist im Legacymodus verfügbar.

Bei anderen Metriken wie CyclomaticComplexity und MaintainabilityIndex werden dieselben Formeln verwendet wie in früheren Versionen von Metrics.exe, aber mit dem neuen Tool wird die Anzahl von IOperations-Anweisungen (logischen Quellanweisungen) anstelle von IL-Anweisungen (Intermediate Language) gezählt. Die Zahlen unterscheiden sich geringfügig von denen, die von der Visual Studio-IDE und früheren Versionen von Metrics.exe generiert wurden.