Partager via


Générer des données de métriques de 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 de métriques 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 comme avertissement, votre fichier EditorConfig contient l’entrée suivante :

dotnet_diagnostic.CA1502.severity = warning

Paramétrage

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

  1. Créez 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 être déclenchée 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 génération du fichier de configuration en tant que AdditionalFiles. Par exemple:

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

Commande de menu Calculer les métriques de code

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

Générer des résultats de métriques de code pour une solution entière

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

  • Dans la barre de menus, sélectionnez Analyser les>métriques> de codepour la solution.

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

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

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

Générer des 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 lesmétriquesde > codepour les projets sélectionnés>.

Les résultats sont générés et la fenêtre Résultats des métriques de code s’affiche. Pour afficher les détails des résultats, développez l’arborescence dans la hiérarchie.

Métriques de code de 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 pour les applications .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écutableMetrics.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écutableMetrics.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 référentiel roslyn-analyzers , exécutez la commande suivante : Restore.cmd

  4. Remplacez le répertoire par 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 sous la racine du dépôt.

utilisation de Metrics.exe

Pour exécuter Metrics.exe, fournissez un projet ou une solution et 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 desMetrics.exe en mode hérité. La version en mode hérité de l’outil génère des valeurs de métrique plus proches des versions antérieures de l’outil générées. En outre, en mode hérité, Metrics.exe génère des métriques de code pour le même ensemble de types de méthodes que les versions précédentes de l’outil pour métriques de code générées. 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 de 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 de métriques de code en mode hérité.

Versions précédentes

Visual Studio 2015 incluait un outil de métriques de code de ligne de commande qui était également appelé Metrics.exe. Cette version précédente de l’outil a effectué une analyse binaire, c’est-à-dire une analyse basée sur l’assembly. La version la plus récente de l’outil Metrics.exe analyse le code source à la place. Étant donné que l’outil Metrics.exe plus récent est basé sur le code source, les résultats des métriques de code de ligne de commande peuvent être différents de ceux générés par l’IDE Visual Studio et par les versions précédentes de Metrics.exe. À compter de Visual Studio 2019, l’IDE Visual Studio analyse le code source comme l’outil en ligne de commande et les résultats doivent être identiques.

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

Différences entre les valeurs des métriques

À compter de Visual Studio 2019 version 16.4 et Microsoft.CodeAnalysis.Metrics (2.9.5), SourceLines puis ExecutableLines remplacez la métrique précédente LinesOfCode . Pour obtenir des descriptions des nouvelles métriques, consultez les valeurs des métriques de code. La LinesOfCode métrique 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 d’instructions IOperations (source logique) au lieu d’instructions de langage intermédiaire (IL). 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.