Share via


Generare dati di metrica del codice

È possibile generare dati delle metriche del codice in tre modi:

Regole delle metriche del codice per gli analizzatori di qualità del codice .NET

Gli analizzatori di qualità del codice .NET includono diverse regole dell'analizzatore delle metriche del codice:

Queste regole sono disabilitate per impostazione predefinita, ma è possibile abilitarle da Esplora soluzioni o in un file EditorConfig. Ad esempio, per abilitare la regola CA1502 come avviso, il file EditorConfig conterrà la voce seguente:

dotnet_diagnostic.CA1502.severity = warning

Impostazione

È possibile configurare le soglie in cui vengono attivate le regole delle metriche del codice.

  1. Creare un file di testo. Ad esempio, è possibile denominarlo CodeMetricsConfig.txt.

  2. Aggiungere le soglie desiderate al file di testo nel formato seguente:

    CA1502: 10
    

    In questo esempio, la regola CA1502 viene configurata per l'avvio quando la complessità ciclomatica di un metodo è maggiore di 10.

  3. Nella finestra Proprietà di Visual Studio o nel file di progetto contrassegnare l'azione di compilazione del file di configurazione come AdditionalFiles. Ad esempio:

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

Comando di menu Calcola metriche codice

Generare metriche di codice per uno o tutti i progetti aperti nell'IDE usando il menu Analizza>calcola metriche del codice.

Generare i risultati delle metriche del codice per un'intera soluzione

È possibile generare i risultati delle metriche del codice per un'intera soluzione in uno dei modi seguenti:

  • Nella barra dei menu selezionare Analizza>calcola metriche>del codice per la soluzione.

  • In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione e quindi scegliere Calcola metriche del codice.

  • Nella finestra Risultati metriche del codice selezionare il pulsante Calcola metriche del codice per la soluzione.

I risultati vengono generati e viene visualizzata la finestra Risultati metriche del codice. Per visualizzare i dettagli dei risultati, espandere l'albero nella colonna Gerarchia .

Generare i risultati delle metriche del codice per uno o più progetti

  1. In Esplora soluzioni selezionare uno o più progetti.

  2. Nella barra dei menu selezionare Analizza>calcola metriche>del codice per progetti selezionati.

I risultati vengono generati e viene visualizzata la finestra Risultati metriche del codice. Per visualizzare i dettagli dei risultati, espandere l'albero nella gerarchia.

Metriche del codice della riga di comando

È possibile generare dati delle metriche del codice dalla riga di comando per i progetti C# e Visual Basic per le app .NET Framework, .NET Core e .NET Standard. Per eseguire metriche di codice dalla riga di comando, installare il pacchetto NuGet Microsoft.CodeAnalysis.Metrics o compilare manualmente il file eseguibile Metrics.exe .

Pacchetto NuGet Microsoft.CodeAnalysis.Metrics

Il modo più semplice per generare i dati delle metriche del codice dalla riga di comando consiste nell'installare il pacchetto NuGet Microsoft.CodeAnalysis.Metrics . Dopo aver installato il pacchetto, eseguire msbuild /t:Metrics dalla directory contenente il file di progetto. Ad esempio:

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)

È possibile eseguire l'override del nome del file di output specificando /p:MetricsOutputFile=<filename>. È anche possibile ottenere i dati delle metriche del codice in stile legacy specificando /p:LEGACY_CODE_METRICS_MODE=true. Ad esempio:

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)

Output delle metriche del codice

L'output XML generato ha il formato seguente:

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

Se non si vuole installare il pacchetto NuGet, è possibile generare e usare direttamente il file eseguibile Metrics.exe . Per generare l'eseguibile Metrics.exe :

  1. Clonare il repository dotnet/roslyn-analyzers .

  2. Aprire il prompt dei comandi per gli sviluppatori per Visual Studio come amministratore.

  3. Dalla radice del repository roslyn-analyzers eseguire il comando seguente: Restore.cmd

  4. Modificare la directory in src\Tools\Metrics.

  5. Eseguire il comando seguente per compilare il progetto Metrics.csproj :

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

    Un eseguibile denominato Metrics.exe viene generato nella directory artifacts\bin nella radice del repository.

Utilizzo di Metrics.exe

Per eseguire Metrics.exe, specificare un progetto o una soluzione e un file XML di output come argomenti. Ad esempio:

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.

Modalità legacy

È possibile scegliere di compilare Metrics.exe in modalità legacy. La versione in modalità legacy dello strumento genera valori delle metriche più vicini alle versioni precedenti dello strumento generato. Inoltre, in modalità legacy, Metrics.exe genera metriche di codice per lo stesso set di tipi di metodo per cui le versioni precedenti dello strumento generano metriche del codice. Ad esempio, non genera dati delle metriche di codice per gli inizializzatori di campo e proprietà. La modalità legacy è utile per la compatibilità con le versioni precedenti o se sono presenti controlli di archiviazione del codice in base ai numeri delle metriche del codice. Il comando per compilare Metrics.exe in modalità legacy è:

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

Per altre informazioni, vedere Abilitare la generazione di metriche del codice in modalità legacy.

Versioni precedenti

Visual Studio 2015 includeva uno strumento di metriche del codice della riga di comando denominato anche Metrics.exe. Questa versione precedente dello strumento ha eseguito un'analisi binaria, ovvero un'analisi basata su assembly. La versione più recente dello strumento Metrics.exe analizza invece il codice sorgente. Poiché lo strumento Metrics.exe più recente è basato sul codice sorgente, i risultati delle metriche del codice della riga di comando possono essere diversi da quelli generati dall'IDE di Visual Studio e dalle versioni precedenti di Metrics.exe. A partire da Visual Studio 2019, l'IDE di Visual Studio analizza il codice sorgente come lo strumento da riga di comando e i risultati devono essere gli stessi.

Il nuovo strumento di metriche del codice della riga di comando calcola le metriche anche in presenza di errori del codice sorgente, purché sia possibile caricare la soluzione e il progetto.

Differenze dei valori delle metriche

A partire da Visual Studio 2019 versione 16.4 e Microsoft.CodeAnalysis.Metics (2.9.5) SourceLines e ExecutableLines sostituire la metrica precedente LinesOfCode . Per le descrizioni delle nuove metriche, vedere Valori delle metriche del codice. La LinesOfCode metrica è disponibile in modalità legacy.

Altre metriche, CyclomaticComplexity ad esempio e MaintainabilityIndex usano le stesse formule delle versioni precedenti di Metrics.exe, ma il nuovo strumento conta il numero di IOperations (istruzioni di origine logica) anziché le istruzioni del linguaggio intermedio (IL). I numeri saranno leggermente diversi da quelli generati dall'IDE di Visual Studio e dalle versioni precedenti di Metrics.exe.