Udostępnij za pośrednictwem


Generowanie danych metryk kodu

Dane metryk kodu można wygenerować na trzy sposoby:

Reguły metryk kodu analizatorów jakości platformy .NET

Analizatory jakości kodu platformy .NET zawierają kilka reguł analizatora metryk kodu:

Te reguły są domyślnie wyłączone, ale można je włączyć z Eksplorator rozwiązań lub w pliku EditorConfig. Na przykład aby włączyć regułę CA1502 jako ostrzeżenie, plik EditorConfig będzie zawierać następujący wpis:

dotnet_diagnostic.CA1502.severity = warning

Konfigurowanie

Można skonfigurować progi, w których są uruchamiane reguły metryk kodu.

  1. Utwórz plik tekstowy. Na przykład można nadać jej nazwę CodeMetricsConfig.txt.

  2. Dodaj żądane progi do pliku tekstowego w następującym formacie:

    CA1502: 10
    

    W tym przykładzie reguła CA1502 jest skonfigurowana do uruchamiania, gdy złożoność cyklatyczna metody jest większa niż 10.

  3. W oknie Właściwości programu Visual Studio lub w pliku projektu oznacz akcję kompilacji pliku konfiguracji jako AdditionalFiles. Na przykład:

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

Polecenie menu Calculate Code Metrics (Obliczanie metryk kodu)

Wygeneruj metryki kodu dla jednego lub wszystkich otwartych projektów w środowisku IDE przy użyciu menu Analizuj>metryki kodu.

Generowanie wyników metryk kodu dla całego rozwiązania

Możesz wygenerować wyniki metryk kodu dla całego rozwiązania w dowolny z następujących sposobów:

  • Na pasku menu wybierz pozycję Analizuj>metryki>kodu dla rozwiązania.

  • W Eksplorator rozwiązań kliknij rozwiązanie prawym przyciskiem myszy, a następnie wybierz polecenie Oblicz metryki kodu.

  • W oknie Wyniki metryk kodu wybierz przycisk Oblicz metryki kodu dla rozwiązania.

Wyniki są generowane, a zostanie wyświetlone okno Wyniki metryk kodu. Aby wyświetlić szczegóły wyników, rozwiń drzewo w kolumnie Hierarchia .

Generowanie wyników metryk kodu dla co najmniej jednego projektu

  1. W Eksplorator rozwiązań wybierz co najmniej jeden projekt.

  2. Na pasku menu wybierz pozycję Analizuj>metryki>kodu dla wybranych projektów.

Wyniki są generowane, a zostanie wyświetlone okno Wyniki metryk kodu. Aby wyświetlić szczegóły wyników, rozwiń drzewo w hierarchii.

Metryki kodu wiersza polecenia

Dane metryk kodu można wygenerować z wiersza polecenia dla projektów C# i Visual Basic dla aplikacji .NET Framework, .NET Core i .NET Standard. Aby uruchomić metryki kodu z poziomu wiersza polecenia, zainstaluj pakiet NuGet Microsoft.CodeAnalysis.Metrics lub skompiluj plik wykonywalny Metrics.exe samodzielnie.

Pakiet NuGet Microsoft.CodeAnalysis.Metrics

Najprostszym sposobem generowania danych metryk kodu z wiersza polecenia jest zainstalowanie pakietu NuGet Microsoft.CodeAnalysis.Metrics . Po zainstalowaniu pakietu uruchom polecenie msbuild /t:Metrics z katalogu zawierającego plik projektu. Na przykład:

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)

Nazwę pliku wyjściowego można zastąpić, określając wartość /p:MetricsOutputFile=<filename>. Możesz również uzyskać dane metryk kodu w starszej wersji , określając wartość /p:LEGACY_CODE_METRICS_MODE=true. Na przykład:

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)

Dane wyjściowe metryk kodu

Wygenerowane dane wyjściowe XML mają następujący 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

Jeśli nie chcesz instalować pakietu NuGet, możesz wygenerować plik wykonywalny Metrics.exe i użyć go bezpośrednio. Aby wygenerować plik wykonywalny Metrics.exe :

  1. Sklonuj repozytorium dotnet/roslyn-analyzers .

  2. Otwórz wiersz polecenia dla deweloperów dla programu Visual Studio jako administrator.

  3. W katalogu głównym repozytorium roslyn-analyzers wykonaj następujące polecenie: Restore.cmd

  4. Zmień katalog na src\Tools\Metrics.

  5. Wykonaj następujące polecenie, aby skompilować projekt Metrics.csproj :

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

    Plik wykonywalny o nazwie Metrics.exe jest generowany w katalogu artifacts\bin w katalogu głównym repozytorium.

Metrics.exe usage

Aby uruchomić plik Metrics.exe, podaj projekt lub rozwiązanie i wyjściowy plik XML jako argumenty. Na przykład:

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.

Tryb starszej wersji

Możesz utworzyć plik Metrics.exe w trybie starszym. Starsza wersja narzędzia generuje wartości metryk, które są bliżej starszych wersji wygenerowanego narzędzia. Ponadto w trybie starszym narzędzie Metrics.exe generuje metryki kodu dla tego samego zestawu typów metod, dla których były poprzednie wersje narzędzia wygenerowane metryki kodu. Na przykład nie generuje danych metryk kodu dla inicjatorów pól i właściwości. Tryb starszej wersji jest przydatny w przypadku zgodności z poprzednimi wersjami lub jeśli masz bramy ewidencjonowania kodu na podstawie liczb metryk kodu. Polecenie kompilacji Metrics.exe w trybie starszym to:

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

Aby uzyskać więcej informacji, zobacz Włączanie generowania metryk kodu w trybie starszym.

Poprzednie wersje

Program Visual Studio 2015 zawierał narzędzie metryk kodu wiersza polecenia, które nosiło również nazwę Metrics.exe. Ta poprzednia wersja narzędzia wykonała analizę binarną, czyli analizę opartą na zestawie. Nowsza wersja narzędzia Metrics.exe analizuje zamiast tego kod źródłowy. Ponieważ nowsze narzędzie Metrics.exe jest oparte na kodzie źródłowym, wyniki metryk kodu wiersza polecenia mogą być inne niż te wygenerowane przez środowisko IDE programu Visual Studio i poprzednie wersje pliku Metrics.exe. Począwszy od programu Visual Studio 2019, środowisko IDE programu Visual Studio analizuje kod źródłowy, taki jak narzędzie wiersza polecenia, a wyniki powinny być takie same.

Nowe narzędzie metryk kodu wiersza polecenia oblicza metryki nawet w obecności błędów kodu źródłowego, o ile można załadować rozwiązanie i projekt.

Różnice wartości metryk

Począwszy od programu Visual Studio 2019 w wersji 16.4 i Microsoft.CodeAnalysis.Metics (2.9.5) SourceLines i ExecutableLines zastąp poprzednią LinesOfCode metrykę. Opisy nowych metryk można znaleźć w temacie Code metrics values (Wartości metryk kodu). Metryka LinesOfCode jest dostępna w trybie starszym.

Inne metryki, takie jak CyclomaticComplexity i MaintainabilityIndex używające tych samych formuł co poprzednie wersje pliku Metrics.exe, ale nowe narzędzie zlicza liczbę IOperations instrukcji (instrukcje logicznego źródła) zamiast instrukcji języka pośredniego (IL). Liczby będą nieco inne niż te wygenerowane przez środowisko IDE programu Visual Studio i poprzednie wersje pliku Metrics.exe.