Formato de MSBuild y Visual Studio para mensajes de diagnóstico

Cuando se ejecuta una herramienta que genera texto, MSBuild examina el texto en busca de errores y advertencias. Muchas herramientas usan un formato conocido para notificar estos mensajes. De manera predeterminada, MSBuild examina el texto y notifica errores o advertencias en función de la salida. Este comportamiento se puede cambiar o deshabilitar mediante estos parámetros en la tarea Exec: IgnoreStandardErrorWarningFormat, CustomErrorRegularExpression y CustomWarningRegularExpression.

Nota

Si decide usar su propia expresión regular para detectar errores y advertencias, debe saber que MSBuild examinará el resultado línea a línea. Aunque la expresión regular personalizada coincida con algo en varias líneas, no se comportará de esa manera debido a cómo MSBuild procesa ese texto.

Eche un vistazo a los cuatro mensajes siguientes, que tienen el formato correcto y los reconocerán MSBuild y Microsoft Visual Studio:

Main.cs(17,20): warning CS0168: The variable 'x' is declared but never used
C:\dir1\strings.resx(2) : error BC30188: Declaration expected.
cl : Command line warning D4024 : unrecognized source file type 'file1.cs', object . . .
error CS0006: Metadata file 'System.dll' could not be found.

Estos mensajes se ajustan al formato especial de cinco partes que se muestra aquí. El orden de estas partes es importante y no debe cambiar.

Origin : SubcategoryCategoryCode : Text

Por ejemplo,

c1 : Command line warning D4024 : unrecognized source file type 'test.xyz'

Origin: c1
Subcategory: Command line
Category: warning
Code: D4024
Text: unrecognized source file type 'test.zyz'

Cada uno de los componentes de este formato se describen tal como sigue:

  • Origen (obligatorio) El origen puede estar en blanco. Si lo hay, el origen suele ser un nombre de herramienta, como cl en uno de los ejemplos. Pero también podría ser un nombre de archivo, como "Main.cs", que se muestra en otro ejemplo. Si es un nombre de archivo, debe ser un nombre de archivo absoluto o relativo, seguido de información opcional de línea o columna entre paréntesis en uno de los formatos siguientes:

    (line) or (line-line) or (line-col) or (line,col-col) or (line,col,line,col)
    

    Las líneas y columnas comienzan en 1 en un archivo; es decir, el principio de un archivo es 1 y la columna situada más a la izquierda es 1. Si Origen es un nombre de herramienta, no debe cambiar en función de la configuración regional; es decir, debe ser independiente de esta.

  • Subcategoría (opcional) La subcategoría se usa para clasificar aún más la categoría; no debe localizarse.

  • Categoría (obligatorio) La categoría debe ser "error" o "advertencia". El uso de mayúsculas y minúsculas no importa. Al igual que con el origen, la categoría no debe localizarse.

  • Código (opcional) El código identifica un código de error o un código de advertencia específicos de la aplicación. El código no debe localizarse y no debe incluir espacios.

  • Texto Texto descriptivo que explica el error y debe localizarse si atiende a varias configuraciones regionales.

Cuando MSBuild llama a las herramientas de línea de comandos (por ejemplo, csc.exe o vbc.exe), examina la salida que emite la herramienta en los flujos de error y de salida estándar. Las líneas que coincidan con el formato de error que acabo de describir se tratarán de forma especial; es decir, las líneas que se reconocen como errores o advertencias se convertirán en errores de compilación y advertencias, respectivamente. Para ver la ventaja real de esto, debe estar compilando desde una herramienta de desarrollo como Visual Studio o VS Code. Dado que MSBuild trata estos mensajes de forma especial, se registran como advertencias y errores de primera clase en la lista de tareas de Visual Studio. Si el origen especifica información de línea o columna, al hacer doble clic en el mensaje se le llevará al origen del error en el archivo con error.