Suprimir avisos do compilador
Com o Visual Studio, você pode especificar quais avisos deseja suprimir especificando os códigos de aviso no Designer de Projeto (páginas de propriedades do projeto). Você também pode suprimir avisos definindo determinadas propriedades diretamente no arquivo de projeto, por meio da linha de comando ou no código quando quiser suprimir um aviso somente em um local.
Alguns compiladores e ferramentas de build também têm opções para especificar o nível de aviso. Isso permite controlar categorias de avisos com uma configuração. Para essas opções, consulte a documentação do idioma e do compilador específicos que você está usando:
Se seu objetivo é obter uma saída mais concisa e focada no registro de compilação, talvez você queira alterar a verbosidade do registro de compilação. As configurações disponíveis são Normal, Detalhadoou Diagnóstico. Para saber mais sobre detalhamento, consulte Como exibir, salvar e configurar arquivos de log de build.
Cuidado
Observe que os avisos devem ser uma indicação de um possível problema com seu código, portanto, você deve entender os riscos de desabilitar qualquer aviso específico. As configurações do Visual Studio desabilitam avisos no nível do projeto. Talvez você queira usar uma abordagem mais direcionada para desabilitar avisos do que o Visual Studio fornece. A maioria dos compiladores fornece maneiras de desabilitar avisos apenas para determinadas linhas de código, para que você ainda possa examinar os avisos se eles ocorrerem em outro lugar no mesmo projeto.
Suprimir avisos específicos para Visual C# ou F#
Use as propriedades Build para suprimir avisos específicos em um projeto inteiro de C# e F#. Se você quiser suprimir um aviso somente em uma parte específica do código em C#, use #aviso pragma. Para F#, use a diretiva de pré-processador #nowarn para desabilitar um aviso em um arquivo de origem inteiro.
Em do Gerenciador de Soluções, escolha o projeto no qual você deseja suprimir avisos.
Clique com o botão direito do mouse no nó do projeto e escolha Propriedades no menu de contexto. Ou selecione o nó do projeto e pressione Alt+Enter.
Selecione Compilar e vá para a subseção Erros e avisos.
Na caixa Suprimir avisos ou Suprimir avisos específicos, especifique os códigos de erro dos avisos que você deseja suprimir, separados por ponto e vírgula. Para obter uma lista e descrições de códigos de aviso, consulte C# Mensagens do Compilador.
Recompile a solução.
Em do Gerenciador de Soluções, escolha o projeto no qual você deseja suprimir avisos.
Clique com o botão direito do mouse no nó do projeto e escolha Propriedades no menu de contexto. Ou selecione o nó do projeto e pressione Alt+Enter.
Escolha a página ou seção Compilar e, se você estiver na interface do usuário atual, abra a subseção Erros e avisos.
Na caixa de diálogo Suprimir avisos ou Suprimir avisos específicos, especifique os códigos de erro dos avisos que você deseja suprimir, separados por ponto e vírgula. Para obter uma lista e descrições de códigos de aviso, consulte Mensagens do Compilador C#.
Recompile a solução.
Nota
Alguns avisos não podem ser suprimidos. Para obter uma lista deles, consulte Opção do compilador NoWarn.
Suprimir avisos específicos para C++
Você pode suprimir avisos em um projeto C++ usando as propriedades do projeto; você usa a página de propriedades de configuração para suprimir avisos específicos para um projeto C++ inteiro. Você também pode suprimir avisos em arquivos específicos usando #pragma warning
. Este artigo aborda o controle no nível do projeto, mas se sua intenção é desabilitar um aviso em um arquivo específico ou apenas em torno de algumas linhas de código, mas você deseja continuar a ver outras ocorrências do mesmo aviso, considere usar #pragma warning
. Consulte #aviso de pragma.
Em do Gerenciador de Soluções, escolha o projeto ou o arquivo de origem no qual você deseja suprimir avisos.
Na barra de menus, escolha Exibir>Páginas de Propriedade.
Escolha a categoria Propriedades de Configuração, escolha a categoria C/C++ e escolha a página Avançado.
Execute uma das seguintes etapas:
Na caixa Desabilitar Avisos Específicos, especifique os códigos de erro dos avisos que você deseja suprimir, separados por um ponto-e-vírgula.
Na caixa Desabilitar Avisos Específicos, escolha Editar para exibir mais opções.
Escolha o botão OK e recompile a solução.
Se o aviso for de outra ferramenta, consulte a documentação da ferramenta específica para descobrir como você pode suprimir avisos para essa ferramenta. Por exemplo, o vinculador C++ tem alguns avisos que você pode desabilitar usando a opção de vinculador /IGNORE
. Consulte /IGNORE (Ignorar avisos específicos) e, para definir essa opção, consulte /link (Opções de passagem para vinculador).
Suprimir avisos para o Visual Basic
Você pode ocultar avisos específicos do compilador para o Visual Basic editando o arquivo .vbproj
do projeto. Para suprimir avisos por categoria, use a Página de propriedades de compilação. Se você quiser desabilitar um aviso em uma parte específica de um arquivo de código, use as diretivas #Disable e #Enable. Para obter mais informações, consulte Configurar avisos no Visual Basic.
Para suprimir avisos específicos para todo um projeto do Visual Basic
Este exemplo mostra como editar o arquivo .vbproj
para suprimir avisos específicos do compilador.
Em do Gerenciador de Soluções, escolha o projeto no qual você deseja suprimir avisos.
Na barra de menus, escolha Project>Unload Project.
No Gerenciador de Soluções, abra o menu de atalho do projeto ou clique com o botão direito do mouse nele e escolha Editar <ProjectName>.vbproj.
O arquivo de projeto XML é aberto no editor de código.
Localize o elemento
<NoWarn>
para a configuração de build com a qual você está compilando e adicione um ou mais números de aviso como o valor do elemento<NoWarn>
. Se você especificar vários números de aviso, separe-os com uma vírgula.O exemplo a seguir mostra o elemento
<NoWarn>
para a configuração de build Depuração em uma plataforma x86, com dois avisos do compilador suprimidos:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> <PlatformTarget>x86</PlatformTarget> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>bin\Debug\</OutputPath> <DefineDebug>true</DefineDebug> <DefineTrace>true</DefineTrace> <ErrorReport>prompt</ErrorReport> <NoWarn>40059,42024</NoWarn> <WarningLevel>1</WarningLevel> </PropertyGroup>
Nota
Os projetos do .NET Core não contêm grupos de propriedades de configuração de build por padrão. Para suprimir avisos em um projeto do .NET Core, adicione a seção de configuração de build ao arquivo manualmente. Por exemplo:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> <RootNamespace>VBDotNetCore_1</RootNamespace> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <NoWarn>42016,41999,42017</NoWarn> </PropertyGroup> </Project>
Salve as alterações no arquivo
.vbproj
.Na barra de menus, escolha Projeto>Recarregar Projeto.
Na barra de menus, escolha Compilar>Recompilar Solução.
A janela de saída não mostra mais os avisos que você especificou.
Para saber mais, consulte a Opção de compilador /nowarn para o compilador de linha de comando do Visual Basic.
Você pode suprimir avisos individualmente ou por categoria. A experiência é diferente dependendo se você está trabalhando com um projeto do .NET Framework ou um projeto .NET Core (ou .NET 5 e posterior).
Se você quiser desabilitar um aviso em uma parte específica de um arquivo de código, use as diretivas #Disable e #Enable. Para obter mais informações, consulte Configurar avisos no Visual Basic.
Projetos do .NET 5 ou posteriores
Você pode editar o arquivo de projeto para suprimir avisos específicos do compilador pelos códigos de diagnóstico ou suprimir avisos por categoria usando o Designer de Projeto. Para abrir o designer de projeto, selecione o nó do projeto, clique com o botão direito do mouse e escolha Propriedades ou pressione Alt+Enter.
Na seção Compilar, escolha Avisos. Em Severidade do aviso, você pode escolher Definir severidades de aviso individualmente. As categorias são mostradas, e você tem a opção de definir cada categoria como Nenhum para desabilitar a categoria de aviso, ou defini-la como Aviso ou Erro para habilitá-la como um aviso ou um erro.
Projetos do .NET Framework
Você pode ocultar avisos específicos do compilador para o Visual Basic editando o arquivo .vbproj
do projeto. Para suprimir avisos por categoria, use a Página de propriedades de compilação.
Para suprimir avisos específicos para todo um projeto do Visual Basic
Este exemplo mostra como editar o arquivo .vbproj
para suprimir avisos específicos do compilador.
Em do Gerenciador de Soluções, escolha o projeto no qual você deseja suprimir avisos.
(.NET) Clique duas vezes no nó do projeto para abrir o arquivo de projeto.
(.NET Framework) Na barra de menus, escolha Project>Unload Project. Em seguida, no Gerenciador de Soluções, abra o menu de atalho ou clique com o botão direito do mouse no projeto e escolha Editar <ProjectName>.vbproj.
O arquivo de projeto do MSBuild é aberto no editor de código. Este é um arquivo XML.
Localize o elemento
<NoWarn>
para a configuração de build com a qual você está compilando e adicione um ou mais números de aviso como o valor do elemento<NoWarn>
. Se você especificar vários números de aviso, separe-os com uma vírgula.O exemplo a seguir mostra o elemento
<NoWarn>
para a configuração de build Depuração em uma plataforma x86, com dois avisos do compilador suprimidos:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> <PlatformTarget>x86</PlatformTarget> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> <OutputPath>bin\Debug\</OutputPath> <DefineDebug>true</DefineDebug> <DefineTrace>true</DefineTrace> <ErrorReport>prompt</ErrorReport> <NoWarn>40059,42024</NoWarn> <WarningLevel>1</WarningLevel> </PropertyGroup>
Nota
Os projetos .NET Core e .NET 5 e posteriores não contêm grupos de propriedades de configuração de build por padrão. Para suprimir avisos em um projeto do .NET Core, adicione a seção de configuração de build ao arquivo manualmente. Por exemplo:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> <RootNamespace>VBDotNetCore_1</RootNamespace> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <NoWarn>42016,41999,42017</NoWarn> </PropertyGroup> </Project>
Salve as alterações no arquivo
.vbproj
.Na barra de menus, escolha Projeto>Recarregar Projeto.
Na barra de menus, escolha Compilar>Recompilar Solução.
A janela Saída não mostra mais os avisos especificados.
Para saber mais, consulte a Opção de compilador /nowarn para o compilador de linha de comando do Visual Basic.
Suprimir um aviso editando o arquivo de projeto
Usar o designer de propriedades do Visual Studio para suprimir avisos resulta em uma alteração no arquivo de projeto. Às vezes, pode ser mais conveniente editar manualmente o arquivo de projeto para realizar a tarefa de desabilitar um aviso. O arquivo de projeto é processado pelo MSBuild, o mecanismo de build da Microsoft. Confira MSBuild.
Além disso, no Visual Studio 2019 versão 16.7 e anterior, alguns avisos de ferramentas diferentes do compilador não podem ser suprimidos de outra forma.
Para abrir o arquivo de projeto no editor do Visual Studio, clique com o botão direito do mouse no nó do projeto e escolha Editar arquivo de projeto. Alguns tipos de projeto exigem que você descarregue o projeto antes de editar o arquivo de projeto. Se você precisar descarregar o projeto, clique com o botão direito do mouse no nó do projeto e escolha Descarregar projeto.
Em uma nova seção
PropertyGroup
, use a propriedadeNoWarn
. Liste os erros que você deseja suprimir, separados por vírgulas ou ponto-e-vírgula. Para avisos do compilador, você pode omitir o código do idioma e inserir apenas o número, mas para maior clareza, recomendamos usar o código completo. Para avisos de outras ferramentas no build, especifique o código completo, incluindo o prefixo (comoMSB
para avisos emitidos pelo próprio MSBuild).O código a seguir adiciona avisos CS0028 e CS0618 à lista de avisos suprimidos:
<PropertyGroup> // Other properties <NoWarn>$(NoWarn);CS0028;CS0618</NoWarn> </PropertyGroup>
Referenciar o valor anterior de
$(NoWarn)
, conforme mostrado no exemplo anterior, adiciona esses números a qualquer valor definido anteriormente paraNoWarn
, em vez de substituí-lo.
Consulte NoWarn.
Suprimir um aviso da linha de comando de build
Se você estiver criando um projeto a partir da linha de comando, também poderá suprimir avisos usando -warnAsMessage
na linha de comando do MSBuild. Use aspas em torno de listas de vários códigos de aviso.
MSBuild.exe -warnAsMessage="CS0028;CS0618" MyProject.csproj
Confira Referência de linha de comando do MSBuild.
Suprimir avisos para todos os projetos e soluções em uma estrutura de diretório
Você pode suprimir avisos para muitos projetos de uma só vez se todos eles estiverem em um diretório comum no sistema de arquivos usando o arquivo MSBuild Directory.Build.props. Consulte Personalizar compilações por diretório. Por exemplo, se você colocar o seguinte arquivo Directory.Build.props na raiz de uma pasta com muitas soluções e projetos, poderá suprimir uma lista especificada de avisos para todos os projetos nessa pasta e recursivamente para pastas dentro dela.
<Project>
<PropertyGroup>
<NoWarn>$(NoWarn);CS0028;CS0618</NoWarn>
</PropertyGroup>
</Project>
Suprimir avisos de ferramenta
Como você suprime avisos de ferramentas diferentes do compilador, como o MSBuild, depende do tipo de projeto que você tem e de qual versão do MSBuild você está usando.
Com o MSBuild 16.8 e posterior, em projetos que usam um SDK ou as importações padrão, você pode suprimir avisos de ferramenta usando os mesmos métodos descritos anteriormente. Você deve especificar o código de erro completo (incluindo o prefixo, como MSB
para MSBuild), não apenas um número como você pode com um aviso do compilador. Além disso, a mensagem não é eliminada; ela ainda é mostrada como uma mensagem informativa, mas foi rebaixada de um aviso.
Com o MSBuild 16.7 e anterior e em qualquer projeto que não use um SDK ou as importações padrão, esses avisos não são suprimidos usando NoWarn
. Nesses casos, a propriedade que você pode usar para suprimir avisos de ferramenta é MSBuildWarningsAsMessages
. Você pode suprimir avisos de build editando o arquivo de projeto ou especificando a opção MSBuildWarningsAsMessages
na linha de comando do MSBuild. Ao usar MSBuildWarningsAsMessages
, use o código de erro completo do MSBuild, incluindo o prefixo MSB
.
<PropertyGroup>
<MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3270</MSBuildWarningsAsMessages>
</PropertyGroup>
Observe que alguns avisos do MSBuild não podem ser suprimidos definindo MSBuildWarningsAsMessages
. Para desabilitá-los, use a opção de linha de comando warnAsMessage
.
Além disso, alguns avisos têm propriedades específicas que você pode definir para desabilitar o aviso. Por exemplo, MSB3253
está desabilitado definindo a propriedade:
<PropertyGroup>
<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
None
</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
</PropertyGroup>
Quando possível, use a propriedade mais explícita, pois um código de erro por si só não é tão facilmente compreendido. A página de referência de erro do código geralmente contém a propriedade usada para desabilitá-la.
Suprimir avisos para pacotes NuGet
Em alguns casos, talvez você queira suprimir avisos do compilador NuGet para um único pacote NuGet, em vez de para um projeto inteiro. O aviso serve a uma finalidade, portanto, você não deseja suprimi-lo no nível do projeto. Por exemplo, um dos avisos do NuGet informa que o pacote pode não ser totalmente compatível com seu projeto. Se você suprimi-lo no nível do projeto e, posteriormente, adicionar um pacote NuGet adicional, nunca saberá se ele estava produzindo o aviso de compatibilidade.
Para suprimir um aviso específico para um único pacote NuGet
Em do Gerenciador de Soluções, selecione o pacote NuGet para o qual você deseja suprimir avisos do compilador.
No menu de contexto ou clique com o botão direito do mouse, selecione Propriedades.
Na caixa Suprimir avisos das propriedades do pacote, insira o número do aviso que você quer suprimir nesse pacote. Se você quiser suprimir mais de um aviso, use uma vírgula para separar os números de aviso.
captura de tela
O aviso desaparece do Gerenciador de Soluções e da Lista de Erros. No arquivo de projeto, a propriedade NoWarn é definida.
<PackageReference Include="NuGet.Build.Tasks.Pack" Version="6.2.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <NoWarn>NU5104</NoWarn> </PackageReference>
Suprimir avisos de Code Analysis
Mensagens de diagnóstico com códigos que começam com CA
são violações e avisos de Análise de Código, que são distintos dos avisos do compilador discutidos neste artigo. Você pode suprimir avisos de Análise de Código de várias maneiras, incluindo o uso de marcação específica do site e todo o projeto ou globalmente, usando arquivos de configuração de regras. Consulte Suprimir avisos de Code Analysis e Suprimir violações de Code Analysis.