Compartir a través de


Configuración de advertencias en Visual Basic

El compilador de Visual Basic incluye un conjunto de advertencias sobre el código que puede provocar errores en tiempo de ejecución. Puede usar esa información para escribir código más limpio, más rápido y mejor con menos errores. Por ejemplo, el compilador generará una advertencia cuando el usuario intente invocar un miembro de una variable de objeto sin asignar, devolver de una función sin establecer el valor devuelto o ejecutar un bloque de Try con errores en la lógica para detectar excepciones.

A veces, el compilador proporciona lógica adicional en nombre del usuario para que el usuario pueda centrarse en la tarea en cuestión, en lugar de anticipar posibles errores. En versiones anteriores de Visual Basic, Option Strict se usaba para limitar la lógica adicional que proporciona el compilador de Visual Basic. La configuración de advertencias permite limitar esta lógica de forma más granular, en el nivel de las advertencias individuales.

Es posible que quiera personalizar el proyecto y desactivar algunas advertencias no pertinentes para la aplicación al convertir otras advertencias en errores. En esta página se explica cómo activar y desactivar advertencias individuales.

Activación y desactivación de advertencias

Hay varias maneras diferentes de configurar advertencias: puede configurarlas mediante el Diseñador de Proyectos , puede utilizar las opciones del compilador /warnaserror y /nowarn, o editar el archivo de proyecto (archivovbproj) y utilizar la propiedad NoWarn MSBuild. Para usar la propiedad MSBuild, consulte Suprimir advertencias específicas para un proyecto completo de Visual Basic.

La experiencia del Diseñador de proyectos de difiere en función de si está trabajando con un proyecto de .NET Framework o con un proyecto de .NET Core (o .NET 5 o posterior).

En proyectos de .NET Core (o .NET 5 y versiones posteriores), la sección Compilar del Diseñador de proyectos contiene una configuración denominada Gravedad de advertencia que puede usar para deshabilitar todas las advertencias, promover todas las advertencias a errores, o puede optar por controlar cada categoría de advertencia por separado (el valor predeterminado). La configuración de la categoría de advertencia aparece en la misma área del Diseñador de proyectos.

En proyectos de .NET Framework, en la pestaña Compilar del Diseñador de proyectos , seleccione la casilla Desactivar todas las advertencias para desactivar todas las advertencias; seleccione Tratar todas las advertencias como errores para tratar todas las advertencias como errores. Algunas advertencias individuales se pueden configurar como error o advertencia según se desee en la tabla mostrada.

En la pestaña Compilar de la página Diseñador de proyectos, puede activar y desactivar las advertencias. Active la casilla Deshabilitar todas las advertencias para deshabilitar todas las advertencias; Seleccione el Tratar todas las advertencias como Errores para tratar todas las advertencias como errores. Algunas advertencias individuales se pueden configurar como error o advertencia según se desee en la tabla mostrada.

Cuando Option Strict se establece en Off, las advertencias relacionadas con Option Strict no se pueden tratar de forma independiente entre sí. Si Option Strict está establecido en Activado, las advertencias asociadas se tratan como errores, no importa cuál sea su estado. Cuando Option Strict se establece en Custom especificando /optionstrict:custom en el compilador de línea de comandos, se pueden activar o desactivar las advertencias Option Strict de forma independiente.

La /warnaserror opción de línea de comandos del compilador también se puede usar para especificar si las advertencias se tratan como errores. Puede agregar una lista delimitada por comas a esta opción para especificar qué advertencias se deben tratar como errores o advertencias mediante + o -. En la tabla siguiente se detallan las posibles opciones.

Opción de línea de comandos Especifica
/warnaserror+ o /warnaserror Tratar todas las advertencias como errores
/warnsaserror- No trate las advertencias como errores. Esta configuración es la predeterminada.
/warnaserror+:<warning list> Trate advertencias específicas como errores, enumerados por su número de identificador de error en una lista delimitada por comas r.
/warnaserror-:<warning list> No trate advertencias específicas como errores, enumeradas por su número de identificador de error en una lista delimitada por comas.
/nowarn No se notifican las advertencias.
/nowarn:<warning list> No se notifican las advertencias específicas, enumeradas por su número de identificación de error en una lista delimitada por comas.

La lista de advertencias contiene los números de identificador de error de las advertencias que se deben tratar como errores, que se pueden usar con las opciones de línea de comandos para activar o desactivar advertencias específicas. Si la lista de advertencias contiene un número no válido, se notifica un error.

Ejemplos

En esta tabla de ejemplos de argumentos de línea de comandos se describe lo que hace cada argumento.

Argumento Descripción
vbc /warnaserror Especifica que todas las advertencias deben tratarse como errores.
vbc /warnaserror:42024 Especifica que la advertencia 42024 debe tratarse como un error.
vbc /warnaserror:42024,42025 Especifica que las advertencias 42024 y 42025 deben tratarse como errores.
vbc /nowarn Especifica que no se debe notificar ninguna advertencia.
vbc /nowarn:42024 Especifica que no se debe notificar la advertencia 42024.
vbc /nowarn:42024,42025 Especifica que no se deben notificar las advertencias 42024 y 42025.

Tipos de advertencias

A continuación se muestra una lista de advertencias que usted podría querer tratar como errores.

Advertencia de conversión implícita

Se genera para instancias de conversión implícita. No incluyen conversiones implícitas de un tipo numérico intrínseco a una cadena cuando se usa el operador &. De manera predeterminada, está desactivada para nuevos proyectos.

Identificador: 42016

Advertencia de resolución de sobrecarga e invocación de método enlazada en tiempo de ejecución

Se genera para instancias de enlace en tiempo de ejecución. De manera predeterminada, está desactivada para nuevos proyectos.

Identificador: 42017

Advertencias de operandos de tipo Object

Se generan cuando se producen operandos de tipo Object que crearían un error con Option Strict On. De manera predeterminada, está activada para nuevos proyectos.

Identificador: 42018 y 42019

Advertencias de declaraciones que requieren la cláusula "As"

Se generan cuando una declaración de propiedad, función o variable a la que le falta una cláusula As habría creado un error con Option Strict On. Se supone que las variables que no tienen un tipo asignado son de tipo Object. De manera predeterminada, está activada para nuevos proyectos.

Identificador: 42020 (declaración de variable), 42021 (declaración de función) y 42022 (declaración de propiedad).

Advertencias de posibles excepciones de referencia nula

Se genera cuando se usa una variable antes de que se le haya asignado un valor. De manera predeterminada, está activada para nuevos proyectos.

Identificador: 42104, 42030

Advertencia de variable local sin usar

Se genera cuando se declara una variable local, pero nunca se hace referencia a él. De manera predeterminada, está activada.

Identificador: 42024

Advertencia de acceso de miembro compartido mediante una variable de instancia

Se genera cuando el acceso a un miembro compartido mediante una instancia puede tener efectos secundarios o cuando el acceso a un miembro compartido mediante una variable de instancia no es el lado derecho de una expresión o se pasa como un parámetro. De manera predeterminada, está activada para nuevos proyectos.

Identificador: 42025

Advertencias de acceso a la propiedad u operador de forma recursiva

Se genera cuando el cuerpo de una rutina usa el mismo operador o propiedad en la que se define. De manera predeterminada, está activada para nuevos proyectos.

Identificador: 42004 (operador), 42026 (propiedad)

Advertencia de función u operador sin valor devuelto

Se genera cuando la función o el operador no tienen un valor devuelto especificado. Esto incluye omitir un Set a la variable local implícita con el mismo nombre que la función. De manera predeterminada, está activada para nuevos proyectos.

Identificador: 42105 (función), 42016 (operador)

Modificador de sobrecargas utilizado en una advertencia relacionada con un módulo

Se genera cuando Overloads se usa en un Module. De manera predeterminada, está activada para nuevos proyectos.

Identificador: 42028

Advertencias de bloques Catch duplicados o superpuestos

Se genera cuando nunca se alcanza un bloque de Catch debido a su relación con otros bloques de Catch definidos. De manera predeterminada, está activada para nuevos proyectos.

Identificador: 42029, 42031