Настройка предупреждений в Visual Basic

Компилятор Visual Basic содержит набор предупреждений о коде, которые могут привести к ошибкам во время выполнения. Эти сведения можно использовать для написания более понятного, быстродействующего и качественного кода с меньшим числом ошибок. Например, компилятор выведет предупреждение при попытке пользователя вызвать элемент неопределенной объектной переменной, произвести возврат из функции без задания возвращаемого значения либо выполнить блок Try с ошибками в логике для перехвата исключений.

Иногда компилятор предоставляет дополнительную логику от имени пользователя, чтобы последний мог сосредоточиться на поставленной задаче, а не на предупреждении возможных ошибок. В предыдущих версиях Visual Basic параметр Strict использовался для ограничения дополнительной логики, которую предоставляет компилятор Visual Basic. Настройка предупреждений позволяет более детально ограничить эту логику на уровне отдельных предупреждений.

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

Включение и отключение предупреждений

Существует два разных способа для настройки предупреждений: их можно настроить с помощью конструктора проектов или воспользоваться параметрами компилятора /warnaserror и /nowarn.

На вкладке Компиляция страницы Конструктор проектов можно включать и отключать предупреждения. Установите флажок Отключить все предупреждения, чтобы отключить все предупреждения, или флажок Обрабатывать предупреждения как ошибки, чтобы обрабатывать все предупреждения как ошибки. Некоторые отдельные предупреждения можно по желанию обрабатывать в качестве ошибок или предупреждений, как указано в приведенной ниже таблице.

Когда для Option Strict задано значение Отключено, связанные с Option Strict предупреждения нельзя рассматривать независимо друг от друга. Когда для Option Strict задано значение Включено, связанные предупреждения считаются ошибками, независимо от их состояния. Когда для Option Strict задано значение Настраиваемый путем указания /optionstrict:custom в компиляторе командной строки, предупреждения Option Strict можно включать и отключать независимо.

Параметр командной строки /warnaserror компилятора можно также использовать для указания того, считаются ли предупреждения ошибками. К этому параметру можно добавить список с разделителями-запятыми, чтобы указать, какие предупреждения следует рассматривать как ошибки или предупреждения, с помощью + или -. В следующей таблице приведены возможные параметры.

Параметр командной строки Указывает
/warnaserror+ Обрабатывать все предупреждения как ошибки
/warnsaserror- Не обрабатывать предупреждения как ошибки. Это значение по умолчанию.
/warnaserror+:<warning list > Обрабатывать отдельные предупреждения как ошибки, идентификатор которых указан в списке с разделителями-запятыми.
/warnaserror-:<warning list> Не обрабатывать отдельные предупреждения как ошибки, идентификатор которых указан в списке с разделителями-запятыми.
/nowarn Не сообщать об ошибках.
/nowarn:<warning list> Не сообщать об отдельных предупреждениях, идентификатор которых указан в списке с разделителями-запятыми.

Список предупреждений содержит идентификаторы ошибок для предупреждений, которые нужно рассматривать как ошибки. Его можно использовать с параметрами командной строки, чтобы включить или отключить конкретные предупреждения. Если список предупреждений содержит недопустимое число, возвращается ошибка.

Примеры

Эта таблица с примерами аргументов командной строки описывает назначение каждого аргумента.

Аргумент Description
vbc /warnaserror Указывает, что все предупреждения должны рассматриваться как ошибки.
vbc /warnaserror:42024 Указывает, что предупреждение 42024 должно рассматриваться как ошибка.
vbc /warnaserror:42024,42025 Указывает, что предупреждения 42024 и 42025 должны рассматриваться как ошибки.
vbc /nowarn Указывает, что предупреждения не должны выводиться.
vbc /nowarn:42024 Указывает, что предупреждение 42024 не должно выводиться.
vbc /nowarn:42024,42025 Указывает, что предупреждения 42024 и 42025 не должны выводиться.

Типы предупреждений

Ниже приведен список предупреждений, которые может потребоваться обрабатывать как ошибки.

Предупреждение о неявном преобразовании

Выдается для экземпляров неявного преобразования. Сюда не включаются неявные преобразования из встроенного числового типа в строку при использовании оператора &. По умолчанию для новых проектов это предупреждение отключено.

Идентификатор: 42016

Предупреждение о вызове метода позднего связывания и разрешении перегрузки

Выдается для экземпляров позднего связывания. По умолчанию для новых проектов это предупреждение отключено.

Идентификатор: 42017

Предупреждения для операндов типа Object

Создаются при наличии операндов типа Object, которые могут привести к ошибке с оператором Option Strict On. По умолчанию для новых проектов это предупреждение включено.

Идентификатор: 42018 и 42019

Предупреждения для объявлений, требующих предложение As

Создаются, когда объявление переменной, функции или свойства, где отсутствует предложение As, приводит к ошибке с оператором Option Strict On. Предполагается, что переменные, которым не назначен тип, имеют тип Object. По умолчанию для новых проектов это предупреждение включено.

Идентификатор: 42020 (объявление переменной), 42021 (объявление функции) и 42022 (объявление свойства).

Предупреждение о возможном исключении пустой ссылки

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

Идентификатор: 42104, 42030

Предупреждение о неиспользуемой локальной переменной

Создается, когда локальная переменная объявлена, но не используется. По умолчанию включен.

Идентификатор: 42024

Предупреждение о доступе к общему элементу через переменную экземпляра

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

Идентификатор: 42025

Предупреждения для рекурсивного доступа к оператору или свойству

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

Идентификатор: 42004 (оператор), 42026 (свойство)

Предупреждение о функции или операторе без возвращаемого значения

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

Идентификатор: 42105 (функция), 42016 (оператор)

Предупреждение об использовании в модуле модификаторов перегрузки

Создается, когда Overloads используется в Module. По умолчанию для новых проектов это предупреждение включено.

Идентификатор: 42028

Предупреждение о повторяющихся или перекрывающихся блоках catch

Создается, когда блок Catch никогда не достигается из-за его отношений с другими блоками Catch, которые были определены. По умолчанию для новых проектов это предупреждение включено.

Идентификатор: 42029, 42031