Générer les données des métriques du code

Vous pouvez générer des données de métriques de code de trois façons :

Règles de métriques de code des analyseurs de qualité du code .NET

Les analyseurs de qualité du code .NET incluent plusieurs règles d’analyseur pour la métrique de code :

Ces règles sont désactivées par défaut, mais vous pouvez les activer à partir de l’Explorateur de solutions ou dans un fichier EditorConfig. Par exemple, pour activer la règle CA1502 en tant qu’avertissement, votre fichier EditorConfig doit contenir l’entrée suivante :

dotnet_diagnostic.CA1502.severity = warning

Configuration

Vous pouvez configurer les seuils à partir desquels les règles de métriques de code se déclenchent.

  1. Créer un fichier texte. Par exemple, vous pouvez le nommer CodeMetricsConfig.txt.

  2. Ajoutez les seuils souhaités au fichier texte au format suivant :

    CA1502: 10
    

    Dans cet exemple, la règle CA1502 est configurée pour se déclencher quand la complexité cyclomatique d’une méthode est supérieure à 10.

  3. Dans la fenêtre Propriétés de Visual Studio ou dans le fichier projet, marquez l’action de build du fichier config en tant que AdditionalFiles. Par exemple :

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

Commande de menu Calculer les métriques du code

Générez des métriques de code pour un seul ou l’ensemble de vos projets ouverts dans l’IDE à l’aide du menu Analyser>Calculer les métriques du code.

Générer les résultats des métriques de code pour une solution complète

Vous pouvez générer les résultats des métriques de code pour une solution complète de l’une des manières suivantes :

  • Dans la barre de menus, sélectionnez Analyser>Calculer les métriques du code>Pour la solution.

  • Dans l’Explorateur de solutions, cliquez avec le bouton droit sur la solution, puis sélectionnez Calculer les métriques du code.

  • Dans la fenêtre Résultats de la métrique du code, sélectionnez le bouton Calculer les métriques du code pour la solution.

Les résultats sont générés, puis la fenêtre Résultats de la métrique du code s’affiche. Pour voir les détails des résultats, développez l’arborescence dans la colonne Hiérarchie.

Générer les résultats des métriques de code pour un ou plusieurs projets

  1. Dans l’Explorateur de solutions, sélectionnez un ou plusieurs projets.

  2. Dans la barre de menus, sélectionnez Analyser>Calculer les métriques du code>Pour le ou les projets sélectionnés.

Les résultats sont générés, puis la fenêtre Résultats de la métrique du code s’affiche. Pour voir les détails des résultats, développez l’arborescence dans Hiérarchie.

Métriques de code au niveau de la ligne de commande

Vous pouvez générer des données de métriques de code à partir de la ligne de commande pour les projets C# et Visual Basic dans le cadre des applications du .NET Framework, .NET Core et .NET Standard. Pour exécuter des métriques de code à partir de la ligne de commande, installez le package NuGet Microsoft.CodeAnalysis.Metrics, ou générez vous-même l’exécutable Metrics.exe.

Package NuGet Microsoft.CodeAnalysis.Metrics

Le moyen le plus simple de générer des données de métriques de code à partir de la ligne de commande consiste à installer le package NuGet Microsoft.CodeAnalysis.Metrics. Une fois que vous avez installé le package, exécutez msbuild /t:Metrics à partir du répertoire qui contient votre fichier projet. Par exemple :

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)

Vous pouvez remplacer le nom du fichier de sortie en spécifiant /p:MetricsOutputFile=<filename>. Vous pouvez également obtenir des données de métriques de code de style hérité en spécifiant /p:LEGACY_CODE_METRICS_MODE=true. Par exemple :

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)

Sortie des métriques de code

La sortie XML générée prend le format suivant :

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

Si vous ne souhaitez pas installer le package NuGet, vous pouvez générer et utiliser directement l’exécutable Metrics.exe. Pour générer l’exécutable Metrics.exe :

  1. Clonez le dépôt dotnet/roslyn-analyzers.

  2. Ouvrez l’invite de commandes développeur pour Visual Studio en tant qu’administrateur.

  3. À partir de la racine du dépôt roslyn-analyzers, exécutez la commande suivante : Restore.cmd

  4. Accédez au répertoire src\Tools\Metrics.

  5. Exécutez la commande suivante pour générer le projet Metrics.csproj :

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

    Un exécutable nommé Metrics.exe est généré dans le répertoire artifacts\bin à la racine du dépôt.

Utilisation de Metrics.exe

Pour exécuter Metrics.exe, indiquez un projet ou une solution ainsi qu’un fichier XML de sortie en tant qu’arguments. Par exemple :

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.

Mode hérité

Vous pouvez choisir de générer Metrics.exe en mode hérité. La version en mode hérité de l’outil génère des valeurs de métriques plus proches de celles que les anciennes versions de l’outil généraient. De plus, en mode hérité, Metrics.exe génère des métriques de code pour le même ensemble de types de méthode que les versions précédentes de l’outil. Par exemple, il ne génère pas de données de métriques de code pour les initialiseurs de champs et de propriétés. Le mode hérité est utile pour la compatibilité descendante, ou si vous avez des portes d’archivage du code basées sur des numéros de métriques de code. La commande permettant de générer Metrics.exe en mode hérité est la suivante :

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

Pour plus d’informations, consultez Activer la génération des métriques de code en mode hérité.

Versions précédentes

Visual Studio 2015 incluait un outil en ligne de commande pour les métriques de code, qui s’appelait également Metrics.exe. Cette version précédente de l’outil effectuait une analyse binaire, c’est-à-dire une analyse basée sur un assembly. La version plus récente de l’outil Metrics.exe analyse le code source à la place. Dans la mesure où le nouvel outil Metrics.exe s’appuie sur le code source, les résultats des métriques de code au niveau de la ligne de commande peuvent être différents de ceux générés par l’IDE Visual Studio ainsi que par les versions précédentes de Metrics.exe. Depuis Visual Studio 2019, l’IDE Visual Studio analyse le code source, tout comme l’outil en ligne de commande. Les résultats doivent donc être les mêmes.

Le nouvel outil en ligne de commande pour les métriques de code calcule les métriques même en présence d’erreurs dans le code source, tant que la solution et le projet peuvent être chargés.

Différences au niveau des valeurs de métriques

Depuis Visual Studio 2019 version 16.4 et Microsoft.CodeAnalysis.Metrics (2.9.5), SourceLines et ExecutableLines remplacent la métrique LinesOfCode antérieure. Pour obtenir une description des nouvelles métriques, consultez Valeurs des métriques de code. La métrique LinesOfCode est disponible en mode hérité.

D’autres métriques telles que CyclomaticComplexity et MaintainabilityIndex utilisent les mêmes formules que les versions précédentes de Metrics.exe, mais le nouvel outil compte le nombre de IOperations (instructions logiques du code source) à la place des instructions IL (langage intermédiaire). Les nombres sont légèrement différents de ceux générés par l’IDE Visual Studio et par les versions précédentes de Metrics.exe.