Compartir a través de


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

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

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 de 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 activan las reglas de métricas de código.

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

  2. Agregue los umbrales deseados al archivo de texto con el formato siguiente:

    CA1502: 10
    

    En este ejemplo, la regla CA1502 está configurada para activarse cuando la complejidad ciclomática de un método es mayor que 10.

  3. En la ventana Propiedades de Visual Studio o en el archivo de 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 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 maneras siguientes:

  • En la barra de menús, seleccione Analizar>calcular métricas> de códigopara 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 de código, seleccione el botón Calcular métricas de código para la solución .

Se generan los resultados y se muestra la ventana Resultados de métricas de 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 proyectos seleccionados.

Se generan los resultados y se muestra la ventana Resultados de métricas de 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 para 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 ejecutableMetrics.exe usted mismo.

Paquete NuGet Microsoft.CodeAnalysis.Metrics

La manera 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 especificando /p:MetricsOutputFile=<filename>. También puede obtener datos de métricas de código de estilo heredado especificando /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 toma 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 desea instalar el paquete NuGet, puede generar y usar el archivo ejecutableMetrics.exe directamente. Para generar el archivo ejecutable deMetrics.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 siguiente comando: Restore.cmd

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

  5. Ejecute el siguiente comando 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 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 elegir compilar Metrics.exe en modo heredado. La versión del modo heredado de la herramienta genera valores de métrica que están más cerca de las versiones anteriores de la herramienta generadas. 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 se generaron las versiones anteriores de las métricas de código generadas por la herramienta. Por ejemplo, no genera datos de métricas de código para inicializadores de campo y propiedad. 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 realizó un análisis binario, es decir, un análisis basado en ensamblados. En su lugar, la versión más reciente de la herramienta Metrics.exe analiza el código fuente. Dado que la herramienta deMetrics.exe más reciente está basada en código fuente, los resultados de las métricas de código de línea de comandos pueden ser diferentes a los generados por el IDE de Visual Studio y por 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 en presencia de errores de código fuente, siempre y cuando se pueda cargar la solución y el proyecto.

Diferencias de valores de métricas

A partir de visual Studio 2019, versión 16.4 y Microsoft.CodeAnalysis.Metrics (2.9.5) SourceLines y ExecutableLines reemplace la métrica anterior LinesOfCode . Para obtener descripciones de las nuevas métricas, consulte Valores de métricas de código. La LinesOfCode métrica 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 instrucciones 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 versiones anteriores de Metrics.exe.