Freigeben über


Generieren von Codemetrikendaten

Sie können Codemetrikendaten auf drei Arten generieren:

Codemetrikenregeln für .NET-Codequalitätsanalyse

Zu den .NET-Codequalitätsanalysatoren gehören mehrere Codemetrikenanalyseregeln :

Diese Regeln sind standardmäßig deaktiviert, aber Sie können sie im Projektmappen-Explorer oder in einer EditorConfig-Datei aktivieren. Um z. B. die Regel CA1502 als Warnung zu aktivieren, enthält die EditorConfig-Datei den folgenden Eintrag:

dotnet_diagnostic.CA1502.severity = warning

Konfiguration

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

  1. Erstellen Sie eine Textdatei. Als Beispiel können Sie es CodeMetricsConfig.txtbenennen.

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

    CA1502: 10
    

    In diesem Beispiel wird 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 Eigenschaftenfenster von Visual Studio oder in der Projektdatei die Buildaktion der Konfigurationsdatei als AdditionalFiles. Beispiel:

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

Befehl 'Codemetriken berechnen'

Generieren Sie Codemetriken für ein oder alle geöffneten Projekte in der IDE mithilfe des Menüs "Codemetrikenanalysieren>".

Generieren von Codemetrikenergebnissen für eine gesamte Lösung

Sie können Codemetrikenergebnisse für eine gesamte Lösung auf eine der folgenden Arten generieren:

  • Wählen Sie in der Menüleiste "Berechnen von Codemetrikenfür Lösunganalysieren>>" aus.

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

  • Wählen Sie im Fenster "Ergebnisse der Codemetriken " die Schaltfläche " Codemetriken für Lösung berechnen " aus.

Die Ergebnisse werden generiert, und das Fenster " Ergebnisse der Codemetriken " wird angezeigt. Um die Ergebnisdetails anzuzeigen, erweitern Sie die Struktur in der Spalte "Hierarchie ".

Generieren von Codemetrikenergebnissen für ein oder mehrere Projekte

  1. Wählen Sie im Projektmappen-Explorer ein oder mehrere Projekte aus.

  2. Wählen Sie in der Menüleiste "Berechnen von Codemetriken>für ausgewählte Projekteanalysieren>" aus.

Die Ergebnisse werden generiert, und das Fenster " Ergebnisse der Codemetriken " wird angezeigt. Um die Ergebnisdetails anzuzeigen, erweitern Sie die Struktur in der Hierarchie.

Befehlszeilencodemetriken

Sie können Codemetrikendaten aus der Befehlszeile für C#- und Visual Basic-Projekte für .NET Framework-, .NET Core- und .NET Standard-Apps generieren. Um Codemetriken über die Befehlszeile auszuführen, installieren Sie das NuGet-Paket "Microsoft.CodeAnalysis.Metrics" , oder erstellen Sie die Metrics.exe ausführbare Datei selbst.

Microsoft.CodeAnalysis.Metrics NuGet-Paket

Die einfachste Möglichkeit zum Generieren von Codemetrikendaten aus der Befehlszeile besteht darin, das NuGet-Paket "Microsoft.CodeAnalysis.Metrics " zu installieren. Nachdem Sie das Paket installiert haben, führen msbuild /t:Metrics Sie es aus dem Verzeichnis aus, das Ihre 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 angeben /p:MetricsOutputFile=<filename>. Sie können auch Codemetrikendaten im Legacy-Stil abrufen, indem Sie angeben /p:LEGACY_CODE_METRICS_MODE=true. 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 das Metrics.exe ausführbare Datei direkt generieren und verwenden. So generieren Sie die Metrics.exe ausführbare Datei:

  1. Klonen Sie das Dotnet/roslyn-Analyzer-Repository .

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

  3. Führen Sie im Stammverzeichnis des Roslyn-Analyzer-Repositorys den folgenden Befehl aus: Restore.cmd

  4. Ändern Sie das Verzeichnis in "src\Tools\Metrics".

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

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

    Eine ausführbare Datei mit dem Namen Metrics.exe wird im Artefakt\bin-Verzeichnis unter dem Repositorystamm generiert.

Metrics.exe Nutzung

Um Metrics.exeauszuführen, geben Sie ein Projekt oder eine Lösung 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. Die Legacymodusversion des Tools generiert Metrikwerte, die den älteren Versionen des Tools näher kommen. Darüber hinaus generiert Metrics.exe Codemetriken für den gleichen Satz von Methodentypen, für die frühere Versionen des Tools Codemetriken generiert haben. Sie generiert beispielsweise keine Codemetrikendaten für Feld- und Eigenschaftsinitialisierer. Der Legacymodus ist für die Abwärtskompatibilität nützlich oder wenn Sie Code-Check-In-Gates basierend auf Codemetrikennummern haben. Der Befehl zum Erstellen 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 des Generierens von Codemetriken im Legacymodus.

Vorherige Versionen

Visual Studio 2015 enthält ein Befehlszeilencodemetrikentool, das auch alsMetrics.exebezeichnet wurde. Diese frühere Version des Tools hat eine binäre Analyse ausgeführt, d. h. eine assemblybasierte Analyse. Stattdessen analysiert die neuere Version des toolsMetrics.exe Quellcode. Da das neuere Metrics.exe Tool quellcodebasiert ist, unterscheiden sich die Ergebnisse von Befehlszeilencodemetriken möglicherweise von denen, die von der Visual Studio-IDE und früheren Versionen von Metrics.exegeneriert werden. Ab Visual Studio 2019 analysiert die Visual Studio-IDE Quellcode wie das Befehlszeilentool, und die Ergebnisse sollten identisch sein.

Das neue Tool für Befehlszeilencodemetriken berechnet Metriken auch im Vorhandensein von Quellcodefehlern, solange die Lösung und das Projekt geladen werden können.

Unterschiede bei Metrikwerten

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

Andere Metriken wie CyclomaticComplexity z. B. und MaintainabilityIndex verwenden dieselben Formeln wie frühere Versionen von Metrics.exe, aber das neue Tool zählt die Anzahl der IOperations (logischen Quellanweisungen) anstelle von Il-Anweisungen (Zwischensprache). Die Zahlen unterscheiden sich geringfügig von denen, die von der Visual Studio-IDE und früheren Versionen von Metrics.exegeneriert wurden.