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 sua meta for ver uma saída mais concisa e focada no log de build, talvez você queira alterar o detalhamento do log de build. As configurações disponíveis são Normal, Detalhada, ou 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 o Visual C# ou F#

Use as propriedades de Compilar para suprimir avisos específicos para todo um projeto em 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 #nowarn diretiva de pré-processador para desabilitar um aviso para um arquivo de origem inteiro.

  1. No Gerenciador de Soluções, escolha o projeto no qual você deseja suprimir avisos.

  2. 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.

  3. Selecione Compilar e vá para a subseção Erros e avisos.

  4. Na caixa Suprimir avisos ou Suprimir avisos específicos, especifique os códigos de erro dos avisos que você quer suprimir, separados por ponto e vírgula. Para obter uma lista e descrições de códigos de aviso, consulte Mensagens do compilador C#.

  5. Recriar a solução.

  1. No Gerenciador de Soluções, escolha o projeto no qual você deseja suprimir avisos.

  2. 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.

  3. 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 .

  4. Na caixa Suprimir avisos ou Suprimir avisos específicos, especifique os códigos de erro dos avisos que você quer suprimir, separados por ponto e vírgula. Para obter uma lista e descrições de códigos de aviso, consulte Mensagens do compilador C#.

  5. Recriar a solução.

Observação

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 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.

  1. No Gerenciador de Soluções, escolha o projeto ou arquivo de origem no qual deseja suprimir avisos.

  2. Na barra de menus, escolha Exibir>Páginas de Propriedade.

  3. Escolha a categoria Propriedades de Configuração, escolha a categoria C++ e escolha a página Avançado.

  4. Execute uma das seguintes etapas:

    • Na caixa Desabilita Avisos Específicos, especifique os códigos de erro dos avisos que deseja suprimir, separados por ponto e vírgula.

    • Na caixa Desabilita Avisos Específicos, escolha Editar para exibir mais opções.

  5. 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 de compilador específicos para Visual Basic editando o arquivo .vbproj para o 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 ao compilador.

  1. No Gerenciador de Soluções, escolha o projeto no qual você deseja suprimir avisos.

  2. Na barra de menus, escolha Projeto>Descarregar Projeto.

  3. No Gerenciador de Soluções, abra o menu de atalho do projeto ou clique com o botão direito do mouse nele e selecione Editar <ProjectName>.vbproj.

    O arquivo XML do projeto é aberto no editor de códigos.

  4. 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.

    A 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>
    

    Observação

    Projetos em .NET Core não contêm grupos de propriedades de configuração de build por padrão. Para suprimir avisos em um projeto em .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>
    
  5. Salve as alterações no arquivo .vbproj.

  6. Na barra de menus, escolha Projeto>Recarregar Projeto.

  7. 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. Consulte 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.

  1. 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.

  2. Em uma nova seção PropertyGroup, use a propriedade NoWarn. 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 (como MSB 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 para NoWarn, 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 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 atende a uma finalidade, portanto convém não suprimi-lo no nível do projeto. Por exemplo, um dos avisos NuGet informa que talvez o pacote não seja totalmente compatível com o seu projeto. Se você suprimi-lo no nível do projeto e depois adicionar outro pacote NuGet, você nunca saberá se ele estava gerando o aviso de compatibilidade.

Para suprimir um aviso específico para um único pacote NuGet

  1. No Gerenciador de Soluções, selecione o pacote NuGet para o qual você deseja suprimir os avisos do compilador.

    Screenshot of NuGet package in Solution Explorer.

    Screenshot of NuGet package in Solution Explorer.

  2. Ao clicar com o botão direito do mouse ou no menu de contexto, selecione Propriedades.

  3. 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.

    NuGet package properties

    Screenshot of NuGet package properties

    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>