Поделиться через


Формат MSBuild и Visual Studio для диагностических сообщений

При запуске средства, которое выводит текст, MSBuild проверяет текст на наличие ошибок и предупреждений. Многие средства используют известный формат для создания отчетов по таким сообщениям. По умолчанию MSBuild проверяет текст и сообщает об ошибках и (или) предупреждениях в зависимости от выходных данных. Это поведение можно дополнить или отключить с помощью следующих параметров задачи Exec : IgnoreStandardErrorWarningFormat, CustomErrorRegularExpressionи CustomWarningRegularExpression.

Примечание.

Если вы решили использовать собственное регулярное выражение для обнаружения ошибок и предупреждений, необходимо помнить, что MSBuild будет просматривать по одной строке в результате за раз. Даже если в пользовательском регулярном выражении есть совпадение с несколькими строками, оно не демонстрирует такого поведения, учитывая способ обработки этого текста MSBuild.

Ознакомьтесь со следующими четырьмя сообщениями, которые отформатированы должным образом и будут распознаваться MSBuild и 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.

Эти сообщения соответствуют специальному формату из пяти частей, который приведен здесь. Порядок этих частей имеет важное значение и не должен меняться.

Origin: : Subcategory Category CodeText

Например,

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'

Каждый из компонентов этого формата описывается следующим образом:

  • Источник (обязательно) Источник может быть пустым. При наличии источника он обычно представляет собой имя средства, например cl, как показано в одном из примеров. Однако он также может быть именем файла, например Main.cs, как показано в другом примере. Если это имя файла, оно должно быть абсолютным или относительным, а после него должны указываться дополнительные сведения о строке или столбце, заключенном в скобке, в следующем виде:

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

    Строки и столбцы начинаются с 1 в файле; то есть начало файла — 1, и самый левый столбец — 1. Если исходное имя является именем средства, оно не должно изменяться в зависимости от языкового стандарта; то есть оно должен быть независимым и нейтральным.

  • Подкатегория (необязательно) Подкатегория используется для классификации непосредственно категории; подкатегория не локализуется.

  • Категория (обязательно) Категория должна иметь значение "Ошибка" или "Предупреждение". Регистр не имеет значения. Как и в случае с источником, категория не локализуется.

  • Код (необязательно) идентифицирует код ошибки, определенный приложением, или код предупреждения. Код не локализуется и не должен содержать пробелы.

  • Текст Понятный текст, объясняющий ошибку; его необходимо локализовать, если поддерживается несколько языковых стандартов.

Если MSBuild вызывает средства командной строки (например, csc.exe или vbc.exe), проверяются выходные данные, которые средство выпускает в стандартные исходящие потоки и стандартные потоки ошибок. Все строки, соответствующие формату ошибок, которые мы только что рассмотрели, будут обрабатываться специфическим способом; то есть строки, которые распознаются как ошибки или предупреждения, будут преобразованы в ошибки сборки и предупреждения сборки, соответственно. Чтобы максимально эффективно использовать эти возможности, необходимо выполнять сборку непосредственно в средстве разработки, таком как Visual Studio или VS Code. Поскольку MSBuild обрабатывает эти сообщения специфическим способом, они регистрируются как предупреждения и ошибки первого класса в списке задач Visual Studio. Если источник указывает сведения о строке или столбце, то двойной щелчок на сообщении позволяет перейти к источнику ошибки в файле, содержащем ошибку.