Generowanie danych metryk kodu
Dane metryk kodu można wygenerować na trzy sposoby:
Włączając analizatory jakości kodu platformy .NET i włączając cztery zawarte w nim reguły metryk kodu (możliwość konserwacji).
Wybierając polecenie menu Analizuj>metryki kodu w programie Visual Studio.
W wierszu polecenia dla projektów C# i Visual Basic.
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.
Utwórz plik tekstowy. Na przykład można nadać jej nazwę CodeMetricsConfig.txt.
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.
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
W Eksplorator rozwiązań wybierz co najmniej jeden projekt.
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 :
Sklonuj repozytorium dotnet/roslyn-analyzers .
Otwórz wiersz polecenia dla deweloperów dla programu Visual Studio jako administrator.
W katalogu głównym repozytorium roslyn-analyzers wykonaj następujące polecenie:
Restore.cmd
Zmień katalog na src\Tools\Metrics.
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.