Partilhar via


Gerar dados de métricas de código

Você pode gerar dados de métricas de código de três maneiras:

Regras de métricas de código dos analisadores de qualidade de código .NET

Os analisadores de qualidade de código .NET incluem várias regras do analisador de métricas de código:

Essas regras são desabilitadas por padrão, mas você pode habilitá-las no Gerenciador de Soluções ou em um arquivo EditorConfig . Por exemplo, para habilitar a regra CA1502 como um aviso, seu arquivo EditorConfig conteria a seguinte entrada:

dotnet_diagnostic.CA1502.severity = warning

Configuração

Você pode configurar os limites nos quais as regras de métricas de código são acionadas.

  1. Crie um arquivo de texto. Como exemplo, você pode nomeá-lo CodeMetricsConfig.txt.

  2. Adicione os limites desejados ao arquivo de texto no seguinte formato:

    CA1502: 10
    

    Neste exemplo, a regra CA1502 é configurada para ser acionada quando a complexidade ciclomática de um método é maior que 10.

  3. Na janela Propriedades do Visual Studio, ou no arquivo de projeto, marque a ação de compilação do arquivo de configuração como AdditionalFiles. Por exemplo:

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

Comando do menu Calcular métricas de código

Gere métricas de código para um ou todos os seus projetos abertos no IDE usando o menu Analisar>calcular métricas de código .

Gerar resultados de métricas de código para uma solução inteira

Você pode gerar resultados de métricas de código para uma solução inteira de qualquer uma das seguintes maneiras:

  • Na barra de menus, selecione Analisar>Calcular métricas de código>para a solução.

  • No Gerenciador de Soluções, clique com o botão direito do mouse na solução e selecione Calcular Métricas de Código.

  • Na janela Resultados de métricas de código , selecione o botão Calcular métricas de código para solução .

Os resultados são gerados e a janela Code Metrics Results é exibida. Para exibir os detalhes dos resultados, expanda a árvore na coluna Hierarquia .

Gerar resultados de métricas de código para um ou mais projetos

  1. No Gerenciador de Soluções, selecione um ou mais projetos.

  2. Na barra de menus, selecione Analisar>calcular métricas> de códigopara projeto(s) selecionado(s).

Os resultados são gerados e a janela Code Metrics Results é exibida. Para exibir os detalhes dos resultados, expanda a árvore na Hierarquia.

Métricas de código de linha de comando

Você pode gerar dados de métricas de código a partir da linha de comando para projetos C# e Visual Basic para aplicativos .NET Framework, .NET Core e .NET Standard. Para executar métricas de código a partir da linha de comando, instale o pacote NuGet Microsoft.CodeAnalysis.Metrics ou crie você mesmo o executável Metrics.exe .

Pacote NuGet Microsoft.CodeAnalysis.Metrics

A maneira mais fácil de gerar dados de métricas de código a partir da linha de comando é instalando o pacote NuGet Microsoft.CodeAnalysis.Metrics . Depois de instalar o pacote, execute msbuild /t:Metrics a partir do diretório que contém o arquivo de projeto. Por exemplo:

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)

Você pode substituir o nome do arquivo de saída especificando /p:MetricsOutputFile=<filename>. Você também pode obter dados de métricas de código no estilo legado especificando /p:LEGACY_CODE_METRICS_MODE=true. Por exemplo:

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)

Saída de métricas de código

A saída XML gerada tem o seguinte formato:

<?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

Se não quiser instalar o pacote NuGet, você pode gerar e usar o executávelMetrics.exe diretamente. Para gerar o executável Metrics.exe:

  1. Clone o repositório dotnet/roslyn-analyzers.

  2. Abra o Developer Command Prompt para o Visual Studio como administrador.

  3. A partir da raiz do repositório roslyn-analyzers , execute o seguinte comando: Restore.cmd

  4. Altere o diretório para src\Tools\Metrics.

  5. Execute o seguinte comando para criar o projeto Metrics.csproj :

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

    Um executável chamado Metrics.exe é gerado no diretório artifacts\bin sob a raiz do repo.

Metrics.exe utilização

Para executar Metrics.exe, forneça um projeto ou solução e um arquivo XML de saída como argumentos. Por exemplo:

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.

Modo legado

Você pode optar por criar Metrics.exe no modo legado. A versão de modo herdado da ferramenta gera valores métricos mais próximos do que as versões mais antigas da ferramenta geravam. Além disso, no modo herdado, Metrics.exe gera métricas de código para o mesmo conjunto de tipos de método para os quais as versões anteriores da ferramenta geraram métricas de código. Por exemplo, ele não gera dados de métricas de código para inicializadores de campo e propriedade. O modo herdado é útil para compatibilidade com versões anteriores ou se você tiver portas de check-in de código com base em números de métricas de código. O comando para criar Metrics.exe no modo herdado é:

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

Para obter mais informações, consulte Habilitar a geração de métricas de código no modo herdado.

Versões anteriores

Visual Studio 2015 incluía uma ferramenta de métricas de código de linha de comando também chamada Metrics.exe. Esta versão anterior da ferramenta fazia uma análise binária, ou seja, uma análise baseada em montagem. A versão mais recente da ferramenta Metrics.exe analisa o código-fonte. Como a ferramenta Metrics.exe mais recente é baseada em código-fonte, os resultados das métricas de código de linha de comando podem ser diferentes daqueles gerados pelo IDE do Visual Studio e por versões anteriores do Metrics.exe. A partir do Visual Studio 2019, o IDE do Visual Studio analisa o código-fonte como a ferramenta de linha de comando e os resultados devem ser os mesmos.

A nova ferramenta de métricas de código de linha de comando calcula métricas mesmo na presença de erros de código-fonte, desde que a solução e o projeto possam ser carregados.

Diferenças de valores métricos

A partir do Visual Studio 2019 versão 16.4 e Microsoft.CodeAnalysis.Metrics (2.9.5), SourceLines e ExecutableLines substituem a métrica anterior LinesOfCode. Para obter descrições das novas métricas, consulte Valores de métricas de código. A LinesOfCode métrica está disponível no modo legado.

Outras métricas, como CyclomaticComplexity e MaintainabilityIndex usam as mesmas fórmulas que as versões anteriores do Metrics.exe, mas a nova ferramenta conta o número de instruções fonte lógica em vez de instruções de linguagem intermediária (IL). Os números serão ligeiramente diferentes daqueles gerados pelo IDE do Visual Studio e por versões anteriores do Metrics.exe.