Udostępnij za pośrednictwem


Generowanie danych metryk kodu

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

Reguły analizatorów jakości kodu .NET dotyczące metryk kodu

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ć w Eksploratorze 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

Konfiguracja

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

  1. Utwórz plik tekstowy. Na przykład możesz 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 IDE używając menu Analizuj>Oblicz 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>Oblicz metryki kodu>Dla rozwiązania.

  • W Eksploratorze 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 zostały wygenerowane, a okno Wyniki metryk kodu jest wyświetlane. Aby wyświetlić szczegóły wyników, rozwiń drzewo w kolumnie Hierarchia .

Generowanie wyników metryk kodu dla co najmniej jednego projektu

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

  2. Z paska menu wybierz Analizuj>Oblicz metryki kodu>Dla wybranych projektów.

Wyniki zostały wygenerowane, a okno Wyniki metryk kodu jest wyświetlane. 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 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)

Wyniki 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ć wykonywalny Metrics.exe:

  1. Sklonuj repozytorium dotnet/roslyn-analyzers .

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

  3. Z katalogu głównego 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.

użycie Metrics.exe

Aby uruchomić 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ć Metrics.exe w trybie starszym. Tryb zgodności wstecznej narzędzia generuje wartości metryk, które są bliższe do wartości generowanych przez starsze wersje narzędzia. Ponadto w trybie starszym Metrics.exe generuje metryki kodu dla tego samego zestawu typów metod, dla których poprzednie wersje narzędzia wygenerowały 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 numerów metryk kodu. Polecenie kompilowania 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 było również nazywane 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ą różnić się od tych wygenerowanych przez środowisko IDE programu Visual Studio i wcześniejszych wersji 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, wersji 16.4, i Microsoft.CodeAnalysis.Metrics (2.9.5), SourceLines i ExecutableLines zastępują poprzednią metrykę LinesOfCode. 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ą tych samych formuł co poprzednie wersje Metrics.exe, ale nowe narzędzie zlicza liczbę instrukcji IOperations (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 Metrics.exe.