在 Visual Basic 中配置警告

Visual Basic 编译器包含一组有关可能导致运行时错误的代码的警告。 可以使用这些信息编写更简洁、更快、更好的代码,并减少 bug。 例如,当用户尝试调用未分配的对象变量的成员、从函数返回而不设置返回值或执行逻辑中的错误 Try 块以捕获异常时,编译器将生成警告。

有时编译器会代表用户提供额外的逻辑,以便用户能够专注于手头的任务,而不是预期可能出现的错误。 在早期版本的 Visual Basic 中,Option Strict 用于限制 Visual Basic 编译器提供的其他逻辑。 通过配置警告,可以在单个警告级别以更精细的方式限制此逻辑。

你可能希望自定义项目,关闭一些与项目无关的警告,并将其他警告转换为错误。 此页面说明如何打开和关闭单个警告。

关闭和打开警告

可通过多种不同的方法来配置警告:可以使用 项目设计器对其进行配置,可以使用 /warnaserror/nowarn 编译器选项,也可以编辑项目文件(vbproj 文件),并使用 NoWarn MSBuild 属性。 若要使用 MSBuild 属性,请参阅 禁止显示整个 Visual Basic 项目的特定警告。

项目设计器 体验因使用的是 .NET Framework 项目还是 .NET Core(或 .NET 5 或更高版本)项目而异。

在 .NET Core(或 .NET 5 及更高版本)项目中,项目设计器编译 部分包含一个名为 警告严重级别 的设置,可用于禁用所有警告,将所有警告视为错误,或者选择单独控制每种类别的警告(这是默认设置)。 警告类别设置显示在 项目设计器的同一区域中。

在 .NET Framework 项目中,在 项目设计器编译 选项卡中,选中“禁用所有警告”复选框以禁用所有警告;选择 将所有警告视为错误 将所有警告视为错误。 有些个别警告可以根据所显示的表的需要,在错误和警告之间切换。

项目设计器 页的“编译”选项卡允许打开和关闭警告。 选中 禁用所有警告 复选框可禁用所有警告;选择 将所有警告视为错误 将所有警告视为错误。 有些个别警告可以根据所显示的表的需要,在错误和警告之间切换。

Option Strict 设置为 关闭时,Option Strict 相关警告无法相互独立处理。 当 Option Strict 设置为 on时,无论其状态是什么,关联的警告都会被视为错误。 如果通过在命令行编译器中指定 /optionstrict:custom 将“Option Strict”设置为“自定义”,则可以单独打开或关闭“Option Strict”警告。

编译器的 /warnaserror 命令行选项还可用于指定是否将警告视为错误。 可以将逗号分隔的列表添加到此选项,以指定应使用 + 或 -将哪些警告视为错误或警告。 下表详细介绍了可能的选项。

命令行选项 指定
/warnaserror+/warnaserror 将所有警告视为错误
/warnsaserror- 不要将警告视为错误。 此设置是默认设置。
/warnaserror+:<warning list> 将特定警告视为错误,其错误 ID 号在逗号分隔的列表 r 中列出。
/warnaserror-:<warning list> 对于在逗号分隔列表中按其错误 ID 号列出的特定警告,不将它们视为错误。
/nowarn 不报告警告。
/nowarn:<warning list> 对于在逗号分隔列表中按其错误 ID 号列出的指定警告,不报告它们。

警告列表包含应视为错误的警告的错误 ID 号,这些 ID 号可以与命令行选项一起使用,以打开或关闭特定警告。 如果警告列表包含无效的数字,则报告错误。

例子

命令行参数的此表描述了每个参数的作用。

论点 描述
vbc /warnaserror 指定应将所有警告视为错误。
vbc /warnaserror:42024 指定应将警告 42024 视为错误。
vbc /warnaserror:42024,42025 指定应将警告 42024 和 42025 视为错误。
vbc /nowarn 指定不应报告任何警告。
vbc /nowarn:42024 指定不应报告 42024 警告。
vbc /nowarn:42024,42025 指定不应报告警告 42024 和 42025。

警告类型

下面是你可能希望视为错误的警告列表。

隐式转换警告

针对隐式转换的实例生成。 使用 & 运算符时,它们不包括从内部数值类型到字符串的隐式转换。 新项目的默认值为“关”。

ID:42016

后期绑定方法调用和重载决策警告

针对晚期绑定的实例生成。 新项目的默认值为“关”。

ID:42017

“Object”类型的操作数警告

当出现会引发“Option Strict On”错误的 Object 类型的操作数时生成。 新项目的默认值为“开”。

ID:42018 和 42019

声明需要“As”子句警告

当缺少 As 子句的变量、函数或属性声明会引发“Option Strict On”错误时生成。 没有为其分配类型的变量假定为类型 Object。 新项目的默认值为“开”。

ID:42020(变量声明)、42021(函数声明)和 42022(属性声明)。

可能的 Null 引用异常警告

在为变量赋值之前使用变量时生成。 新项目的默认值为“开”。

ID:42104、42030

未使用的局部变量警告

在声明局部变量但从未引用过局部变量时生成。 默认值为 on。

ID:42024

通过实例变量访问共享成员警告

通过可能有副作用的实例访问共享成员时,或者通过不是表达式右侧或正作为参数传入的实例变量访问共享成员时生成。 新项目的默认值为“开”。

ID:42025

递归运算符或属性访问警告

当例程的主体使用它在其中定义的相同运算符或属性时生成。 新项目的默认值为“开”。

ID:42004(运算符)、42026(属性)

不带返回值警告的函数或运算符

当函数或运算符未指定返回值时生成。 这包括忽略与函数同名的隐式局部变量的 Set。 新项目的默认值为“开”。

ID:42105(函数)、42016(运算符)

模块警告中使用的重载修饰符

Module中使用 Overloads 时生成。 新项目的默认值为“开”。

ID:42028

重复或重叠的 Catch 块警告

当因某个 Catch 块与其他已定义的 Catch 块相关联而从未到达该块时生成。 新项目的默认值为“开”。

ID:42029、42031