Como configurar avisos no Visual Basic

O compilador do Visual Basic inclui um conjunto de avisos sobre o código que podem causar erros em tempo de execução. É possível usar essas informações para escrever códigos mais limpos, mais rápidos e melhores com menos bugs. Por exemplo, o compilador produzirá um aviso quando o usuário tentar invocar um membro de uma variável de objeto não atribuída, retornar de uma função sem definir o valor retornado ou executar um bloco Try com erros na lógica para capturar exceções.

Às vezes, o compilador fornece lógica extra em nome do usuário para que o usuário possa se concentrar na tarefa em questão, em vez de antecipar possíveis erros. Em versões anteriores do Visual Basic, o Option Strict era usado para limitar a lógica adicional fornecida pelo compilador do Visual Basic. A configuração de avisos permite limitar essa lógica de uma maneira mais granular, no nível dos avisos individuais.

Talvez você deseje personalizar seu projeto e desligar alguns avisos não relevantes ao aplicativo enquanto transforma outros avisos em erros. Esta página explica como ativar e desativar avisos individuais.

Ativar e desativar avisos

Há duas maneiras diferentes para configurar avisos: é possível configurá-los usando o Designer de Projeto ou usar as opções /warnaserror e /nowarn do compilador.

A guia Compilar da página Designer de Projeto permite ativar e desativar avisos. Marque a caixa de seleção Desabilitar Todos os Avisos para desabilitar todos os avisos; marque Tratar Todos os Avisos como Erros para tratar todos os avisos como erros. Alguns avisos individuais podem ser ativados/desativados como erro ou aviso, conforme desejado, na tabela exibida.

Quando Opção Estrita é definida como Desativado, os avisos relacionados à Opção Estrita não podem ser tratados independentemente uns dos outros. Quando Opção Estrita é definida como Ativado, os avisos associados são tratados como erros, independentemente de seu status. Quando Opção Estrita é definida como Personalizado especificando /optionstrict:custom no compilador de linha de comando, os avisos da Opção Estrita podem ser ativados ou desativados de forma independente.

A opção de linha de comando /warnaserror do compilador também pode ser usada para especificar se os avisos são tratados como erros. É possível adicionar uma lista delimitada por vírgula a essa opção para especificar quais avisos devem ser tratados como erros ou avisos, usando + ou -. A tabela a seguir fornece detalhes das possíveis opções.

Opção de linha de comando Especifica
/warnaserror+ Tratar todos os avisos como erros
/warnsaserror- Não trate avisos como erros. Esse é o padrão.
/warnaserror+:<warning list > Trate avisos específicos como erros, listados por seus números de ID de erro em uma lista delimitada por vírgula.
/warnaserror-:<warning list> Não trate avisos específicos como erros, listados por seus números de ID de erro em uma lista delimitada por vírgula.
/nowarn Não relate os avisos.
/nowarn:<warning list> Não relate os avisos especificados, listados por seus números de ID de erro em uma lista delimitada por vírgula.

A lista de avisos contém os números de ID de erro dos avisos que devem ser tratados como erros, que podem ser usados com as opções de linha de comando para ativar ou desativar avisos específicos. Se a lista de avisos contiver um número inválido, um erro será relatado.

Exemplos

Esta tabela de exemplos de argumentos de linha de comando descreve a ação de cada argumento.

Argumento Descrição
vbc /warnaserror Especifica que todos os avisos devem ser tratado como erros.
vbc /warnaserror:42024 Especifica que o aviso 42024 deve ser tratado como um erro.
vbc /warnaserror:42024,42025 Especifica que os avisos 42024 e 42025 devem ser tratados como erros.
vbc /nowarn Especifica que nenhum aviso deve ser relatado.
vbc /nowarn:42024 Especifica que o aviso 42024 não deve ser relatado.
vbc /nowarn:42024,42025 Especifica que os avisos 42024 e 42025 não devem ser relatados.

Tipos de avisos

Veja a seguir uma lista de avisos que você pode desejar tratar como erros.

Aviso de conversão implícita

Gerado para instâncias de conversão implícita. Eles não incluem conversões implícitas de um tipo numérico intrínseco em uma cadeia de caracteres durante o uso do operador &. O padrão para novos projetos é desativado.

ID: 42016

Aviso de invocação de método e resolução de sobrecarga com associação tardia

Gerado para instâncias de associação tardia. O padrão para novos projetos é desativado.

ID: 42017

Avisos de operandos do tipo 'Object'

Gerados quando ocorrem operandos do tipo Object que criarão um erro com Option Strict On. O padrão para novos projetos é ativado.

ID: 42018 e 42019

Avisos de declarações que exigem a cláusula 'As'

Gerados quando uma declaração da variável, função ou propriedade que não tem uma cláusula As cria um erro com Option Strict On. Variáveis que não têm um tipo atribuído a elas são consideradas como sendo do tipo Object. O padrão para novos projetos é ativado.

ID: 42020 (declaração da variável), 42021 (declaração da função) e 42022 (declaração da propriedade).

Avisos de possível exceção de referência nula

Gerados quando uma variável é usada antes de receber um valor. O padrão para novos projetos é ativado.

ID: 42104, 42030

Aviso de variável local não utilizada

Gerado quando uma variável local é declarada, mas nunca referenciada. O padrão é habilitado.

ID: 42024

Aviso de acesso de membro compartilhado por meio de variável de instância

Gerado quando o acesso a um membro compartilhado por meio de uma instância pode ter efeitos colaterais, ou quando o acesso a um membro compartilhado por meio de uma variável de instância não está do lado direito de uma expressão ou está sendo passado como um parâmetro. O padrão para novos projetos é ativado.

ID: 42025

Avisos de operador recursivo ou acesso de propriedade

Gerados quando o corpo de uma rotina usa o mesmo operador ou a mesma propriedade em que é definido. O padrão para novos projetos é ativado.

ID: 42004 (operador), 42026 (propriedade)

Aviso de função ou operador sem o valor retornado

Gerado quando a função ou o operador não tem um valor retornado especificado. Isso inclui a omissão de um Set na variável local implícita com o mesmo nome da função. O padrão para novos projetos é ativado.

ID: 42105 (função), 42016 (operador)

Aviso de modificador de sobrecargas usado em um módulo

Gerado quando Overloads é usado em um Module. O padrão para novos projetos é ativado.

ID: 42028

Avisos de blocos de captura duplicados ou sobrepostos

Gerado quando um bloco Catch nunca é acessado devido à definição de sua relação com outros blocos Catch. O padrão para novos projetos é ativado.

ID: 42029, 42031