Generera kodmåttdata

Du kan generera kodmåttdata på tre sätt:

Kodmåttsregler för .NET-kodkvalitetsanalyser

Analysverktygen för .NET-kodkvalitet innehåller flera analysregler för kodmått:

Dessa regler är inaktiverade som standard, men du kan aktivera dem från Solution Explorer eller i en EditorConfig-fil . Om du till exempel vill aktivera regeln CA1502 som en varning innehåller EditorConfig-filen följande post:

dotnet_diagnostic.CA1502.severity = warning

Konfiguration

Du kan konfigurera de tröskelvärden där kodmåttreglerna utlöses.

  1. Skapa en textfil. Du kan till exempel ge den namnet CodeMetricsConfig.txt.

  2. Lägg till önskade tröskelvärden i textfilen i följande format:

    CA1502: 10
    

    I det här exemplet konfigureras regeln CA1502 att utlösas när en metods cyklomatiska komplexitet är större än 10.

  3. I fönstret Egenskaper i Visual Studio eller i projektfilen markerar du byggåtgärden för konfigurationsfilen som AdditionalFiles. Till exempel:

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

Kommandot Beräkna kodmått i meny

Generera kodmått för ett eller alla öppna projekt i IDE med hjälp av menyn Analysera>beräkna kodmått .

Generera kodmåttresultat för en hel lösning

Du kan generera kodmåttresultat för en hel lösning på något av följande sätt:

  • På menyraden väljer du Analysera>beräkna kodmått>för lösning.

  • Högerklicka på lösningen i Solution Explorer och välj sedan Beräkna kodmått.

  • I fönstret Kodmåttresultat väljer du knappen Beräkna kodmått för lösning .

Resultaten genereras och fönstret Kodmåttresultat visas. Om du vill visa resultatinformationen expanderar du trädet i kolumnen Hierarki .

Generera kodmåttresultat för ett eller flera projekt

  1. I Solution Explorer väljer du ett eller flera projekt.

  2. På menyraden väljer du Analysera>beräkna kodmått>för valda projekt.

Resultaten genereras och fönstret Kodmåttresultat visas. Om du vill visa resultatinformationen expanderar du trädet i hierarkin.

Kommandoradens kodmetrik

Du kan generera kodmåttdata från kommandoraden för C#- och Visual Basic-projekt för .NET Framework-, .NET Core- och .NET Standard-appar. Om du vill köra kodmått från kommandoraden installerar du NuGet-paketet Microsoft.CodeAnalysis.Metrics eller skapar Metrics.exe körbar fil själv.

Microsoft.CodeAnalysis.Metrics NuGet-paket

Det enklaste sättet att generera kodmåttdata från kommandoraden är genom att installera NuGet-paketet Microsoft.CodeAnalysis.Metrics . Kör msbuild /t:Metrics från katalogen som innehåller projektfilen när du har installerat paketet. Till exempel:

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)

Du kan åsidosätta utdatafilens namn genom att ange /p:MetricsOutputFile=<filename>. Du kan också hämta kodstatistikdata i äldre format genom att ange /p:LEGACY_CODE_METRICS_MODE=true. Till exempel:

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)

Utdata för kodmått

De genererade XML-utdata har följande 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

Om du inte vill installera NuGet-paketet kan du generera och använda Metrics.exe körbar fil direkt. Så här genererar du den körbara filen Metrics.exe:

  1. Klona repo dotnet/roslyn-analyzers.

  2. Öppna Kommandotolken för utvecklare för Visual Studio som administratör.

  3. Kör följande kommando från roten av roslyn-analyzers-lagringsplatsen: Restore.cmd

  4. Ändra katalogen till src\Tools\Metrics.

  5. Kör följande kommando för att skapa projektet Metrics.csproj :

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

    En körbar fil med namnet Metrics.exe genereras i katalogen artifacts\bin under lagringsplatsens rot.

Metrics.exe användning

Om du vill köra Metrics.exeanger du ett projekt eller en lösning och en XML-utdatafil som argument. Till exempel:

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.

Äldre läge

Du kan välja att skapa Metrics.exe i äldre läge. Den äldre lägesversionen av verktyget genererar måttvärden som ligger närmare vad verktygets äldre versioner genererade. I äldre läge genererar Metrics.exe dessutom kodmått för samma uppsättning metodtyper som tidigare versioner av verktyget genererade kodmått för. Den genererar till exempel inte kodmåttdata för fält- och egenskapsinitierare. Äldre läge är användbart för bakåtkompatibilitet eller om du har kodgrindar för incheckning baserat på kodmått. Kommandot för att skapa Metrics.exe i äldre läge är:

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

Mer information finns i Aktivera generering av kodmått i äldre läge.

Tidigare versioner

Visual Studio 2015 innehöll ett kommandoradskodmåttverktyg som också kallades Metrics.exe. Den här tidigare versionen av verktyget gjorde en binär analys, dvs. en sammansättningsbaserad analys. Den nyare versionen av verktygetMetrics.exe analyserar källkoden i stället. Eftersom det nyare Metrics.exe verktyget är källkodsbaserat kan kommandoradskodens resultat skilja sig från dem som genereras av Visual Studio IDE och av tidigare versioner av Metrics.exe. Från och med Visual Studio 2019 analyserar Visual Studio IDE källkod som kommandoradsverktyget och resultatet bör vara detsamma.

Det nya kommandoradsverktyget för kodmått beräknar mått även i närvaro av källkodsfel, så länge lösningen och projektet kan läsas in.

Skillnader i måttvärde

Från och med Visual Studio 2019 version 16.4 och Microsoft.CodeAnalysis.Metrics (2.9.5) SourceLines och ExecutableLines ersätt det tidigare LinesOfCode måttet. Beskrivningar av de nya måtten finns i Kodmåttvärden. Mätvärdet LinesOfCode är tillgängligt i äldre version.

Andra mått som CyclomaticComplexity och MaintainabilityIndex använder samma formler som tidigare versioner av Metrics.exe, men det nya verktyget räknar antalet IOperations (instruktioner för logisk källa) i stället för instruktioner för mellanliggande språk (IL). Siffrorna skiljer sig något från dem som genereras av Visual Studio IDE och av tidigare versioner av Metrics.exe.