Generación de datos de las métricas de código

Puede generar datos de métricas de código de tres formas:

Reglas de métricas de código de analizadores de calidad de código de .NET

Los analizadores de calidad de código de .NET incluyen varias reglas del analizador de métricas de código:

Estas reglas están deshabilitadas de forma predeterminada, pero puede habilitarlas desde el Explorador de soluciones o en un archivo EditorConfig. Por ejemplo, para habilitar la regla CA1502 como advertencia, el archivo EditorConfig contendrá la entrada siguiente:

dotnet_diagnostic.CA1502.severity = warning

Configuración

Puede configurar los umbrales en los que se desencadenan las reglas de métricas de código.

  1. Crear un archivo de texto Por ejemplo, puede asignarle el nombre CodeMetricsConfig.txt.

  2. Agregue los umbrales que quiera usar al archivo de texto con el formato siguiente:

    CA1502: 10
    

    En este ejemplo, la regla CA1502 se configura para desencadenarse cuando la complejidad ciclomática de un método sea mayor que 10.

  3. En la ventana Propiedades de Visual Studio o en el archivo del proyecto, marque la acción de compilación del archivo de configuración como AdditionalFiles. Por ejemplo:

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

Comando de menú Calcular métricas de código

Genere métricas de código para uno o todos los proyectos que tenga abiertos en el IDE mediante el menú Analizar>Calcular métricas de código.

Generación de resultados de métricas de código para una solución completa

Puede generar resultados de métricas de código para una solución completa de cualquiera de las formas siguientes:

  • En la barra de menús, seleccione Analizar>Calcular métricas de código>Para la solución.

  • En el Explorador de soluciones, haga clic con el botón derecho en la solución y seleccione Calcular métricas de código.

  • En la ventana Resultados de métricas del código, seleccione el botón Calcular métricas de código para la solución.

Se generan los resultados y aparece la ventana Resultados de métricas del código. Para ver los detalles de los resultados, expanda el árbol en la columna Jerarquía.

Generación de resultados de métricas de código para uno o varios proyectos

  1. En el Explorador de soluciones, seleccione uno o varios proyectos.

  2. En la barra de menús, seleccione Analizar>Calcular métricas de código>Para los proyectos seleccionados.

Se generan los resultados y aparece la ventana Resultados de métricas del código. Para ver los detalles de los resultados, expanda el árbol en la Jerarquía.

Métricas de código de línea de comandos

Puede generar datos de métricas de código desde la línea de comandos para proyectos de C# y Visual Basic y aplicaciones de .NET Framework, .NET Core y .NET Standard. Para ejecutar métricas de código desde la línea de comandos, instale el paquete NuGet Microsoft.CodeAnalysis.Metrics o compile el archivo ejecutable Metrics.exe usted mismo.

Microsoft.CodeAnalysis.Metrics NuGet package

La forma más fácil de generar datos de métricas de código desde la línea de comandos es instalar el paquete NuGet Microsoft.CodeAnalysis.Metrics. Después de instalar el paquete, ejecute msbuild /t:Metrics desde el directorio que contiene el archivo del proyecto. Por ejemplo:

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)

Puede invalidar el nombre del archivo de salida si especifica /p:MetricsOutputFile=<filename>. También puede obtener datos de métricas de código de estilo heredado si especifica /p:LEGACY_CODE_METRICS_MODE=true. Por ejemplo:

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)

Salida de métricas de código

La salida XML generada tiene el formato siguiente:

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

Si no quiere instalar el paquete NuGet, puede generar y usar el archivo ejecutable Metrics.exe directamente. Para generar el archivo ejecutable Metrics.exe:

  1. Clone el repositorio dotnet/roslyn-analyzers.

  2. Abra el Símbolo del sistema para desarrolladores para Visual Studio como administrador.

  3. Desde la raíz del repositorio roslyn-analyzers, ejecute el comando siguiente: Restore.cmd

  4. Cambie el directorio a src\Tools\Metrics.

  5. Ejecute el comando siguiente para compilar el proyecto Metrics.csproj:

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

    Se genera un archivo ejecutable denominado Metrics.exe en el directorio artifacts\bin en la raíz del repositorio.

Uso de Metrics.exe

Para ejecutar Metrics.exe, proporcione un proyecto o una solución y un archivo XML de salida como argumentos. Por ejemplo:

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 heredado

Puede optar por compilar Metrics.exe en modo heredado. La versión de modo heredado de la herramienta genera valores de métrica que están más próximos a los que generaban las versiones anteriores de la herramienta. Además, en el modo heredado, Metrics.exe genera métricas de código para el mismo conjunto de tipos de método para los que las versiones anteriores de la herramienta generaban métricas de código. Por ejemplo, no genera datos de métricas de código para inicializadores de propiedades y campos. El modo heredado es útil para la compatibilidad con versiones anteriores o si tiene puertas de entrada de código basadas en números de métricas de código. El comando para compilar Metrics.exe en modo heredado es:

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

Para obtener más información, consulte Habilitación de la generación de métricas de código en modo heredado.

Versiones anteriores

Visual Studio 2015 incluía una herramienta de métricas de código de línea de comandos que también se llamaba Metrics.exe. Esta versión anterior de la herramienta realizaba un análisis binario, es decir, un análisis basado en ensamblados. En su lugar, la última versión de la herramienta Metrics.exe analiza el código fuente. Dado que la herramienta Metrics.exe más reciente se basa en el código fuente, los resultados de las métricas de código de línea de comandos pueden ser distintos a los generados por el IDE de Visual Studio y por las versiones anteriores de Metrics.exe. A partir de Visual Studio 2019, el IDE de Visual Studio analiza el código fuente como la herramienta de línea de comandos y los resultados deben ser los mismos.

La nueva herramienta de métricas de código de línea de comandos calcula las métricas incluso aunque aparezcan errores de código fuente, siempre y cuando se puedan cargar la solución y el proyecto.

Diferencias de valores de las métricas

A partir de Visual Studio 2019, versión 16.4, y Microsoft.CodeAnalysis.Metics (2.9.5), SourceLines y ExecutableLines reemplazan a la métrica LinesOfCode anterior. Para obtener descripciones de las nuevas métricas, consulte Valores de métrica de código. La métrica LinesOfCode está disponible en modo heredado.

Otras métricas, como CyclomaticComplexity y MaintainabilityIndex, usan las mismas fórmulas que las versiones anteriores de Metrics.exe, pero la nueva herramienta cuenta el número de IOperations (instrucciones de origen lógico) en lugar de instrucciones de lenguaje intermedio (IL). Los números serán ligeramente diferentes a los generados por el IDE de Visual Studio y por las versiones anteriores de Metrics.exe.