Параметры компилятора C# для информирования об ошибках и предупреждениях

Следующие параметры управляют тем, как компилятор сообщает об ошибках и предупреждениях. Новый синтаксис MSBuild выделен полужирным шрифтом. Для старого синтаксиса csc.exe используется формат code style.

  • WarningLevel / -warn: определение порога предупреждений.
  • AnalysisLevel: задайте необязательный уровень предупреждения.
  • TreatWarningsAsErrors / -warnaserror: обработка всех предупреждений как ошибок.
  • WarningsAsErrors / -warnaserror: обработка одного или нескольких предупреждений как ошибок.
  • WarningsNotAsErrors / -warnnotaserror: обработка одного или нескольких предупреждений не как ошибок.
  • NoWarn / -nowarn: задайте список отключенных предупреждений.
  • CodeAnalysisRuleSet / -ruleset: определение файла набора правил, который отключает определенную диагностику.
  • ErrorLog / -errorlog: определение файла для регистрации всей диагностики компилятора и анализатора.
  • ReportAnalyzer / -reportanalyzer: регистрация дополнительных сведений анализатора, включая сведения о времени выполнения.

WarningLevel

Параметр WarningLevel определяет порог предупреждений для отображения компилятором.

<WarningLevel>3</WarningLevel>

Значение элемента — это порог предупреждений, который должен отображаться для компиляции: при меньших значениях отображаются только самые серьезные предупреждения. Чем выше значение, тем больше предупреждений будет отображаться. Значение должно быть больше нуля или равно ему.

Уровень предупреждений Значение
0 Отключает вывод всех предупреждающих сообщений.
1 Отображает серьезные предупреждающие сообщения.
2 Отображает предупреждения уровня 1, а также некоторые менее серьезные предупреждения, в том числе связанные со скрытием членов класса.
3 Отображает предупреждения уровня 2, а также некоторые менее серьезные предупреждения, в том числе связанные с выражениями, которые всегда возвращают значение true или false.
4 (по умолчанию) Отображает все предупреждения уровня 3, а также информационные предупреждения.

Предупреждение

Командная строка компилятора принимает значения, превышающие 4, чтобы включить предупреждения о волне предупреждения. Однако пакет SDK для .NET задает WarningLevel для сопоставления AnalysisLevel в файле проекта.

Чтобы получить сведения об ошибке или предупреждении, можно найти код ошибки в индексе справки. Дополнительные сведения о других способах получить информацию об ошибках и предупреждениях см. в разделе Ошибки компилятора C#. Используйте TreatWarningsAsErrors, чтобы обрабатывать все предупреждения как ошибки. Используйте DisabledWarnings, чтобы отключить определенные предупреждения.

Уровень анализа

Параметр AnalysisLevel указывает дополнительные волны предупреждений и анализаторы для включения. Предупреждения о волне предупреждений — это дополнительные проверки, которые улучшают код или обеспечивают совместимость с предстоящими выпусками. Анализаторы предоставляют возможности lint-like для улучшения кода.

<AnalysisLevel>preview</AnalysisLevel>
Уровень анализа Значение
5 Отображает все необязательные предупреждения волны 5.
6 Отображает все необязательные предупреждения волны 6.
7 Отображает все необязательные предупреждения волны 7.
последняя (по умолчанию) Отображает все информационные предупреждения вплоть до текущего выпуска.
предварительный просмотр Отображает все информационные предупреждения вплоть до последней предварительной версии.
ничего Отключает все информационные предупреждения.

Дополнительные сведения о необязательных предупреждениях см. в разделе "Волны предупреждений".

Чтобы получить сведения об ошибке или предупреждении, выполните поиск по соответствующему коду в указателе справочной системы. Дополнительные сведения о других способах получить информацию об ошибках и предупреждениях см. в разделе Ошибки компилятора C#. Используйте TreatWarningsAsErrors, чтобы обрабатывать все предупреждения как ошибки. Используйте NoWarn для отключения определенных предупреждений.

TreatWarningsAsErrors

Параметр TreatWarningsAsErrors включает обработку всех предупреждений как ошибок. Вы также можете использовать предупрежденияAsErrors для задания только некоторых предупреждений в качестве ошибок. Если включить TreatWarningsAsErrors, вы можете использовать warningsNotAsErrors для перечисления предупреждений, которые не должны рассматриваться как ошибки.

<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

Все предупреждающие сообщения вместо этого будут выводиться как ошибки. Процесс сборки будет остановлен (выходные файлы не будут создаваться). По умолчанию TreatWarningsAsErrors не применяется, и это означает, что наличие предупреждений не препятствует созданию выходного файла. Если требуется обрабатывать как ошибки только конкретные предупреждения, укажите их номера через запятую. Набор всех предупреждений о допустимости значений NULL можно указать с помощью сокращения Nullable. Используйте WarningLevel, чтобы определить порог предупреждений, которые будет отображать компилятор. Используйте NoWarn для отключения определенных предупреждений.

Внимание

Существует два тонких различия между использованием <TreatWarningsAsErrors> элемента в csproj-файле и с помощью переключателя командной warnaserror строки MSBuild. TreatWarningsAsErrors влияет только на компилятор C#, а не на другие задачи MSBuild в файле csproj . Переключатель командной warnaserror строки влияет на все задачи. Во-вторых, компилятор не выдает никаких выходных данных при использовании TreatWarningsAsErrors . Компилятор создает выходные данные при использовании коммутатора командной warnaserror строки.

WarningsAsErrors и WarningsNotAsErrors

Параметры WarningsAsErrors и WarningsNotAsErrors переопределяют параметр TreatWarningsAsErrors для списка предупреждений. Этот параметр можно использовать со всеми предупреждениями CS . Префикс CS является необязательным. Вы можете использовать либо номер, либо "CS", за которым следует ошибка или номер предупреждения. Сведения о других элементах, влияющих на предупреждения, см. в свойствах Common MSBuild. Помимо списка идентификаторов предупреждений, можно также указать строку nullable, которая обрабатывает все предупреждения, связанные с допустимостью null, как ошибки.

Включите предупреждения 0219, 0168 и все предупреждения, допускающие значение NULL, как ошибки:

<WarningsAsErrors>0219,CS0168,nullable</WarningsAsErrors>

Отключение этих же предупреждений как ошибок:

<WarningsNotAsErrors>0219,CS0168,nullable</WarningsNotAsErrors>

Вы можете использовать WarningsAsErrors, чтобы настроить набор предупреждений как ошибок. Используйте WarningsNotAsErrors, чтобы настроить набор предупреждений, которые не должны обрабатываться как ошибки, если вы включили обработку всех предупреждений как ошибок.

NoWarn

Параметр NoWarn позволяет отключить компилятор от отображения одного или нескольких предупреждений, где warningnumber1warningnumber2 являются номера предупреждений, которые нужно отключить компилятору. Разделяйте предупреждения запятыми. Вы можете указать nullable , чтобы отключить все предупреждения, связанные с возможностью null.

<NoWarn>warningnumber1,warningnumber2</NoWarn>

Указывайте только числовую часть идентификатора предупреждения. Например, чтобы отключить CS0028, можно указать <NoWarn>28</NoWarn>. Компилятор автоматически игнорирует номера предупреждений, переданные в NoWarn , которые были допустимы в предыдущих выпусках, но были удалены. Например, предупреждение CS0679 было действительным в компиляторе Visual Studio .NET 2002, но было удалено в последующих версиях.

Следующие предупреждения не могут быть отключены параметром NoWarn :

  • Предупреждение компилятора (уровень 1) CS2002
  • Предупреждение компилятора (уровень 1) CS2023
  • Предупреждение компилятора (уровень 1) CS2029

Обратите внимание, что предупреждения предназначены для обозначения потенциальной проблемы с кодом, поэтому следует понимать риски отключения любого конкретного предупреждения. Используйте NoWarn , только если вы уверены, что предупреждение является ложным положительным и не может быть ошибкой среды выполнения.

Возможно, вам потребуется использовать более целевой подход к отключению предупреждений:

  • Большинство компиляторов предоставляют способы отключения предупреждений только для определенных строк кода, чтобы вы могли по-прежнему просматривать предупреждения, если они происходят в другом месте в том же проекте. Чтобы отключить предупреждение только в определенной части кода в C#, используйте предупреждение #pragma.

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

Чтобы добавить номера предупреждений к любому ранее заданному значению NoWarn без перезаписи, см. ссылку$(NoWarn), как показано в следующем примере:

   <NoWarn>$(NoWarn);newwarningnumber3;newwarningnumber4</NoWarn>

CodeAnalysisRuleSet

Укажите файл набора правил, который настраивает определенную диагностику.

<CodeAnalysisRuleSet>MyConfiguration.ruleset</CodeAnalysisRuleSet>

MyConfiguration.ruleset — это путь к файлу набора правил. Дополнительные сведения об использовании наборов правил см. в статье Использование набора правил для группирования правил анализа кода.

ErrorLog

Укажите файл для записи данных диагностики компилятора и анализатора в журнал.

<ErrorLog>compiler-diagnostics.sarif</ErrorLog>

Параметр ErrorLog указывает компилятору вывести журнал в формате обмена результатами статического анализа (SARIF). Журналы SARIF обычно считываются средствами, которые анализируют результаты диагностики компилятора и анализатора.

Формат SARIF можно указать с помощью аргумента version ErrorLog для элемента:

<ErrorLog>logVersion21.json,version=2.1</ErrorLog>

Разделитель может быть запятой (,) или точкой с запятой (;). Допустимые значения для версии: "1", "2" и "2.1". Значение по умолчанию — "1". "2" и "2.1" оба означают SARIF версии 2.1.0.

ReportAnalyzer

Включение в отчет дополнительных сведений об анализаторе, включая время выполнения.

<ReportAnalyzer>true</ReportAnalyzer>

Параметр ReportAnalyzer указывает компилятору создавать дополнительные сведения журнала MSBuild, в которых подробно описываются характеристики производительности анализаторов в сборке. Обычно он используется создателями анализаторов в ходе проверки анализатора.

Внимание

Дополнительные сведения журнала, созданные этим флагом, создаются только при использовании параметра командной -verbosity:detailed строки. Дополнительные сведения см. в статье о параметрах в документации ПО MSBuild.