Supresión de advertencias del compilador

Con Visual Studio, puede especificar qué advertencias desea suprimir especificando los códigos de advertencia en el Diseñador de proyectos (páginas de propiedades del proyecto). También puede suprimir advertencias estableciendo determinadas propiedades directamente en el archivo del proyecto, a través de la línea de comandos o en el código cuando desea suprimir una advertencia solo en una ubicación.

Algunos compiladores y herramientas de compilación también tienen opciones para especificar el nivel de advertencia. Esto le permite controlar categorías de advertencias con una configuración. Para estas opciones, consulte la documentación del lenguaje y el compilador específicos que usa:

Si el objetivo es ver una salida más concisa y centrada en el registro de compilación, es posible que desee cambiar el nivel de detalle del registro de compilación. La configuración disponible es Normal, Detalladoo Diagnóstico. Para obtener más información sobre el nivel de detalle, vea Cómo: Ver, guardar y configurar archivos de registro de compilación.

Precaución

Tenga en cuenta que las advertencias están pensadas para ser una indicación de un posible problema con el código, por lo que debe comprender los riesgos de deshabilitar cualquier advertencia determinada. La configuración de Visual Studio deshabilita las advertencias en el nivel de proyecto. Es posible que quiera usar un enfoque más específico para deshabilitar las advertencias que proporciona Visual Studio. La mayoría de los compiladores proporcionan formas de deshabilitar las advertencias solo para determinadas líneas de código, de modo que pueda seguir revisando las advertencias si se producen en otro lugar del mismo proyecto.

Suprimir advertencias específicas de Visual C# o F#

Use las propiedades de Compilación para suprimir advertencias específicas para un proyecto completo de C# y F#. Si desea suprimir una advertencia solo en una parte específica del código de C#, use advertencia #pragma. Para F#, use la directiva de preprocesador #nowarn para deshabilitar una advertencia para un archivo de origen completo.

  1. En el Explorador de soluciones, elija el proyecto en el que quiere suprimir las advertencias.

  2. Haga clic con el botón derecho en el nodo del proyecto y elija Propiedades en el menú contextual. O bien, seleccione el nodo del proyecto y presione Alt+Entrar.

  3. Elija Compilar y vaya a la subsección Errores y advertencias.

  4. En el cuadro Suprimir advertencias o Suprimir advertencias específicas, especifique los códigos de error de las advertencias que quiere suprimir, separados por punto y coma. Para obtener una lista y descripciones de códigos de advertencia, vea Mensajes del compilador de C#.

  5. Recompilar la solución.

  1. En el Explorador de soluciones, elija el proyecto en el que quiere suprimir las advertencias.

  2. Haga clic con el botón derecho en el nodo del proyecto y elija Propiedades en el menú contextual. O bien, seleccione el nodo del proyecto y presione Alt+Entrar.

  3. Elija la sección o la página Compilar y, si está en la interfaz de usuario actual, abra la subsección Errores advertencias.

  4. En el cuadro Suprimir advertencias o Suprimir advertencias específicas, especifique los códigos de error de las advertencias que quiere suprimir, separados por punto y coma. Para obtener una lista y descripciones de códigos de advertencia, vea Mensajes del compilador de C#.

  5. Recompilar la solución.

Nota

Algunas advertencias no se pueden suprimir. Para obtener una lista de ellos, consulte la opción del compilador NoWarn.

Supresión de advertencias específicas de C++

Puede suprimir advertencias en un proyecto de C++ utilizando las propiedades del proyecto; se utiliza la página de propiedades Propiedades de configuración para suprimir advertencias específicas para un proyecto C++ completo. También puede suprimir advertencias en archivos específicos mediante #pragma warning. En este artículo se describe el control de nivel de proyecto, pero si su intención es deshabilitar una advertencia en un archivo determinado o solo alrededor de unas pocas líneas de código, pero desea seguir viendo otras apariciones de la misma advertencia, debe considerar el uso de #pragma warning. Consulte advertencia #pragma.

  1. En el Explorador de soluciones, elija el proyecto o archivo de origen donde quiere suprimir advertencias.

  2. En la barra de menús, elija Ver>Páginas de propiedades.

  3. Elija la categoría Propiedades de configuración, seleccione la categoría C/C++ y, después, seleccione la página Opciones avanzadas.

  4. Realice uno de estos pasos:

    • En el cuadro Deshabilitar advertencias específicas, especifique los códigos de error de las advertencias que quiere suprimir, separados por un punto y coma.

    • En el cuadro Deshabilitar advertencias específicas, elija Editar para mostrar más opciones.

  5. Elija el botón Aceptar y, después, recompile la solución.

Si la advertencia procede de otra herramienta, consulte la documentación de la herramienta específica para averiguar cómo puede suprimir las advertencias de esa herramienta. Por ejemplo, el enlazador de C++ tiene algunas advertencias que puede deshabilitar mediante la opción enlazador /IGNORE. Vea /IGNORE (Omitir advertencias específicas) y para establecer esta opción, vea /link (Pasar opciones al enlazador).

Suprimir advertencias de Visual Basic

Edite el archivo .vbproj del proyecto para ocultar advertencias del compilador específicas para Visual Basic. Para suprimir las advertencias por categoría, puede usar la página de propiedades de Compilación. Si desea deshabilitar una advertencia en una parte específica de un archivo de código, use directivas #Disable y #Enable. Para obtener más información, vea Configurar advertencias en Visual Basic.

Para suprimir advertencias específicas para todo un proyecto de Visual Basic

En este ejemplo se muestra cómo modificar el archivo .vbproj para suprimir advertencias específicas del compilador.

  1. En el Explorador de soluciones, elija el proyecto en el que quiere suprimir las advertencias.

  2. En la barra de menús, elija Proyecto>Descargar proyecto.

  3. En el Explorador de soluciones, abra el menú contextual del proyecto y luego elija Editar <NombreProyecto>.vbproj.

    El archivo del proyecto XML se abre en el editor de código.

  4. Busque el elemento <NoWarn> de la configuración de la compilación con la que está compilando y agregue uno o varios números de advertencia como valor del elemento <NoWarn>. Si especifica varios números de advertencia, sepárelos con una coma.

    En el ejemplo siguiente se muestra el elemento <NoWarn> para la configuración de compilación de Depuración en una plataforma x86, con dos advertencias de compilador suprimidas:

    <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

    Los proyectos de .NET Core no contienen grupos de propiedades de configuración de compilación de forma predeterminada. Para suprimir las advertencias en un proyecto de .NET Core, agregue la sección de configuración de compilación al archivo manualmente. Por ejemplo:

    <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. Guarde los cambios en el archivo .vbproj.

  6. En la barra de menús, elija Proyecto>Recargar proyecto.

  7. En la barra de menús, elija Compilación>Recompilar solución.

    La ventana Salida ya no muestra las advertencias que ha especificado.

Para obtener más información, consulte la opción del compilador /nowarn para el compilador de línea de comandos de Visual Basic.

Suprimir una advertencia editando el archivo del proyecto

El uso del diseñador de propiedades de Visual Studio para suprimir advertencias da como resultado un cambio en el archivo de proyecto. En ocasiones, puede ser más conveniente editar manualmente el archivo del proyecto para realizar la tarea de deshabilitar una advertencia. MSBuild procesa el archivo de proyecto, el motor de compilación de Microsoft. Consulte MSBuild.

Además, en La versión 16.7 y anteriores de Visual Studio 2019, algunas advertencias de herramientas distintas del compilador no se pueden suprimir de ninguna otra manera.

  1. Para abrir el archivo de proyecto en el editor de Visual Studio, haga clic con el botón derecho en el nodo del proyecto y elija Editar archivo del proyecto. Algunos tipos de proyecto requieren que descargue el proyecto antes de poder editar el archivo del proyecto. Si necesita descargar el proyecto, haga clic con el botón derecho en el nodo del proyecto y elija Descargar proyecto.

  2. En una nueva sección de PropertyGroup, use la propiedad NoWarn. Enumere los errores que desea suprimir, separados por comas o punto y coma. En el caso de las advertencias del compilador, puede omitir el código de lenguaje y escribir solo el número, pero para mayor claridad, se recomienda usar el código completo. Para las advertencias de otras herramientas de la compilación, especifique el código completo, incluido el prefijo (por ejemplo MSB, para las advertencias emitidas por MSBuild).

    El código siguiente agrega advertencias CS0028 y CS0618 a la lista de advertencias suprimidas:

    <PropertyGroup>
       // Other properties
       <NoWarn>$(NoWarn);CS0028;CS0618</NoWarn>
    </PropertyGroup>
    

    Al hacer referencia al valor anterior de $(NoWarn) como se muestra en el ejemplo anterior, se agregan esos números a cualquier valor establecido previamente para NoWarn, en lugar de sobrescribirlo.

Consulte NoWarn.

Suprimir una advertencia de la línea de comandos de compilación

Si va a compilar un proyecto desde la línea de comandos, también puede suprimir advertencias mediante -warnAsMessage en la línea de comandos de MSBuild. Use comillas alrededor de listas de varios códigos de advertencia.

MSBuild.exe -warnAsMessage="CS0028;CS0618" MyProject.csproj

Consulte Referencia de línea de comandos de MSBuild.

Suprimir advertencias de herramientas

La forma de suprimir advertencias de herramientas distintas del compilador, como MSBuild, depende del tipo de proyecto que tenga y de la versión de MSBuild que use.

Con MSBuild 16.8 y versiones posteriores, en proyectos que usan un SDK o las importaciones estándar, puede suprimir advertencias de herramientas mediante los mismos métodos descritos anteriormente. Debe especificar el código de error completo (incluido el prefijo como MSB para MSBuild), no solo un número como puede con una advertencia del compilador. Además, el mensaje no se elimina; todavía se muestra como un mensaje informativo, pero se ha degradado de una advertencia.

Con MSBuild 16.7 y versiones anteriores, y en cualquier proyecto que no use un SDK ni las importaciones estándar, esas advertencias no se suprimen mediante NoWarn. En tales casos, la propiedad que puede usar para suprimir advertencias de herramientas es MSBuildWarningsAsMessages. Puede suprimir las advertencias de compilación editando el archivo del proyecto o especificando la opción MSBuildWarningsAsMessages en la línea de comandos de MSBuild. Cuando se usa MSBuildWarningsAsMessages, use el código de error completo de MSBuild, incluido el prefijo MSB.

<PropertyGroup>
    <MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3270</MSBuildWarningsAsMessages>
</PropertyGroup>

Tenga en cuenta que algunas advertencias de MSBuild no se pueden suprimir estableciendo MSBuildWarningsAsMessages. Para deshabilitarlos, use la opción de línea de comandos warnAsMessage.

Además, algunas advertencias tienen propiedades específicas que puede establecer para deshabilitar la advertencia. Por ejemplo, MSB3253 está deshabilitado estableciendo la propiedad :

 <PropertyGroup>
    <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
        None
    </ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
  </PropertyGroup>

Cuando sea posible, use la propiedad más explícita, ya que un código de error por sí mismo no se entiende tan fácilmente. La página de referencia de error del código normalmente contiene la propiedad que se usa para deshabilitarlo.

Suprimir advertencias para paquetes NuGet

En algunos casos, es posible que quiera suprimir las advertencias del compilador de NuGet para un único paquete NuGet, en lugar de para todo un proyecto. La advertencia sirve para un propósito determinado, por lo que no es necesario que la suprima a nivel de proyecto. Por ejemplo, una de las advertencias de NuGet indica que el paquete podría no ser totalmente compatible con el proyecto. Si se suprime a nivel de proyecto y después agrega un paquete NuGet adicional, nunca podrá saber si era ese el que provocaba la advertencia de compatibilidad.

Para suprimir una advertencia concreta para un único paquete NuGet

  1. En el Explorador de soluciones, seleccione el paquete NuGet para el que desea suprimir las advertencias del compilador.

    Screenshot of NuGet package in Solution Explorer.

    Screenshot of NuGet package in Solution Explorer.

  2. En el menú contextual que se abre al hacer clic con el botón derecho, seleccione Propiedades.

  3. En el cuadro Suprimir advertencias de propiedades del paquete, escriba el número de advertencia que desea suprimir para este paquete. Si desea suprimir más de una advertencia, use una coma para separar los números de advertencia.

    NuGet package properties

    Screenshot of NuGet package properties

    La advertencia desaparece del Explorador de soluciones y la Lista de errores. En el archivo del proyecto, se establece la propiedad NoWarn.

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