Gerar dados de métricas de código
Você pode gerar dados de métricas de código de três maneiras:
Habilitando analisadores de qualidade de código do .NET e habilitando as quatro regras de métricas de código (capacidade de manutenção) que ele contém.
Escolhendo o comando de menu Analisar>Calcular Métricas de Código no Visual Studio.
Na linha de comando para projetos C# e Visual Basic.
Regras de métricas de código de analisadores de qualidade de código do .NET
Os analisadores de qualidade de código do .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 do Gerenciador de Soluções ou em um arquivo EditorConfig. Por exemplo, para habilitar a regra CA1502 como um aviso, o arquivo EditorConfig conteria a seguinte entrada:
dotnet_diagnostic.CA1502.severity = warning
Configuração
Você pode configurar os limites em que as regras de métricas de código são disparadas.
Crie um arquivo de texto. Por exemplo, você pode nomeá-lo CodeMetricsConfig.txt.
Adicione os limites desejados ao arquivo de texto no seguinte formato:
CA1502: 10
Neste exemplo, a regra CA1502 é configurada para disparar quando a complexidade ciclomática de um método é maior que 10.
Na janela Propriedades do Visual Studio ou no arquivo de projeto, marque a ação de build do arquivo de configuração como AdditionalFiles. Por exemplo:
<ItemGroup> <AdditionalFiles Include="CodeMetricsConfig.txt" /> </ItemGroup>
Comando de 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 Solução.
Em 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 das 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 Resultados das Métricas de Código é 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
No Gerenciador de Soluções, selecione um ou mais projetos.
Na barra de menus, selecione Analisar>Calcular Métricas de Código>Para Projetos Selecionados.
Os resultados são gerados e a janela Resultados das Métricas de Código é 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 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 na linha de comando, instale o pacote NuGet Microsoft.CodeAnalysis.Metrics ou crie o executável Metrics.exe por conta própria.
Pacote NuGet Microsoft.CodeAnalysis.Metrics
A maneira mais fácil de gerar dados de métricas de código da linha de comando é instalando o pacote NuGet Microsoft.CodeAnalysis.Metrics. Depois de instalar o pacote, execute msbuild /t:Metrics
no 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 de estilo herdado 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 usa 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 você não quiser instalar o pacote NuGet, poderá gerar e usar o executável Metrics.exe diretamente. Para gerar o executável Metrics.exe:
Clone o repositório dotnet/roslyn-analyzers.
Abra o Prompt de Comando do Desenvolvedor para Visual Studio como administrador.
Na raiz do repositório roslyn-analyzers, execute o seguinte comando:
Restore.cmd
Altere o diretório para src\Tools\Metrics.
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 na raiz do repositório.
Uso de Metrics.exe
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 herdado
Você pode optar por criar Metrics.exe no modo herdado. A versão do modo herdado da ferramenta gera valores de métrica mais próximos das versões mais antigas da ferramenta gerada. 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 geravam 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 portões 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, confira Habilitar a geração de métricas de código no modo herdado.
Versões anteriores
O Visual Studio 2015 incluiu uma ferramenta de métricas de código de linha de comando que também foi chamada de Metrics.exe. Esta versão anterior da ferramenta fez uma análise binária, ou seja, uma análise baseada em assembly. 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 pelas 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 as 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 valor de métrica
Começando no Visual Studio 2019 versão 16.4 e Microsoft.CodeAnalysis.Metics (2.9.5), SourceLines
e ExecutableLines
substituem a métrica anterior LinesOfCode
. Para obter descrições das novas métricas, confira Valores de métricas de código. A métrica LinesOfCode
está disponível no modo herdado.
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 IOperations
(instruções de origem lógica) em vez de instruções de IL (linguagem intermediária). Os números serão ligeiramente diferentes daqueles gerados pelo IDE do Visual Studio e pelas versões anteriores do Metrics.exe.