Cómo suprimir una advertencia específica de MSBuild


97

¿Hay alguna forma de deshabilitar una advertencia específica de MSBuild (por ejemplo, MSB3253) al ejecutar MSBuild desde la línea de comandos? Mi script de compilación llama a msbuild.exe de la siguiente manera:

msbuild.exe MySolution.sln /t:Rebuild /p:Configuration=Release

Descubrí que puedo suprimir las advertencias de C # (por ejemplo, CS0618) usando otro parámetro para msbuild.exe:

msbuild.exe MySolution.sln /t:Rebuild /p:Configuration=Release /p:NoWarn=0618

Sin embargo, este enfoque no funciona para las advertencias de MSBuild. ¿Quizás hay otra propiedad mágica para establecer?

Estoy usando .NET 3.5 y VS2008.

Respuestas:


61

Me las arreglé para suprimir el nivel de advertencia con /p:WarningLevel=X

msbuild.exe MySolution.sln /t:Rebuild /p:WarningLevel=0 /p:Configuration=Release
                                      ^^^^^^^^^^^^^^^^^
Warning  
Level    Meaning
-------- -------------------------------------------
      0  Turns off emission of all warning messages.

      1  Displays severe warning messages

      2  Displays level 1 warnings plus certain, less-severe warnings, such
         as warnings about hiding class members

      3  Displays level 2 warnings plus certain, less-severe warnings, such 
         as warnings about expressions that always evaluate to true or false

      4  (the default) Displays all level 3 warnings plus informational warnings

2
No creo que esto funcione si ha configurado el nivel de advertencia para cada proyecto en la solución para que sea mayor que 0.
si618

6
Sí claro. Eso es como apagar el problema del motor en su automóvil usando cinta en el tablero :-)
cacau

Simplemente probé con MSBuild 15.4.8.50001, y / p: WarningLevel = 0 NO suprime la advertencia MSBuild MSB3227.
Pensamiento

2
Lo probé y esto suprimirá las advertencias del compilador (CS ..) pero no las advertencias de MSBuild (MSB ...)
marsze

Este es un truco si realmente lo necesita, pero puede crear un Directory.Build.rsp adyacente al csproj en el que desea suprimir esta advertencia y agregar el contenido "/ WarnAsMessage: MSBXXXX".
mjsabby

37

Para MSB3253, simplemente puede configurar en el archivo de proyecto (* .csproj) que causa dicha advertencia.

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <!-- some code goes here -->
    <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
        None
    </ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
    <!-- some code goes here -->
  </PropertyGroup>

5
Esta respuesta también cubre MSB3270. Muy útil cuando utiliza un solucionador de ensamblaje personalizado para administrar cargas de ensamblaje específicas de la plataforma.
MOverlund

16
¿Existe una lista completa de estas configuraciones mágicas en algún lugar de MS ..?
ATV

¿Podría escribir más detalles sobre cómo se debe hacer esto? cual archivo? debe ser modificado? ¿Funciona esto para MSB8012?
Gayane

Solo para necro esto ... Hice clic derecho en mi archivo * .csproj en el Explorador de soluciones, hice clic en "Descargar proyecto", hice clic derecho en "Editar". Luego copió esta sección "ResolveAssembly" en el primer grupo de propiedades al final (generalmente después de la etiqueta TargetFrameworkProfile) y detiene esta advertencia
Steven Wood

31

Según este hilo del foro de MSDN, las advertencias de MSBuild no se pueden suprimir.


21
Nota: esta respuesta es correcta para los errores de MSBuild (con el prefijo "MSB"), como pidió OP. Si Google lo trajo aquí y desea eliminar los errores del compilador (por ejemplo, "CS2008"), puede hacer lo que hizo OP: /p:nowarn=2008(elimine el "CS" del número)
Michael Haren

1
¿Sabe si este sigue siendo el caso?
Martin Ba

Documentos de MSDN en / nowarn aquí . Msbuild pasa esta variable a csc.exe en parte de su destino CoreCompile.
Dav Evans

No parece haber una forma de suprimir las advertencias del compilador de roslyn y suprimirlas en MS-Build. '#pragma warning disable RCS1110 // Declare el tipo dentro del espacio de nombres.' con RCS eliminado devuelve la advertencia del compilador.
user1431356

11

Para aquellos que buscan en Google esto ahora (como yo): el próximo MSBuild 15.0 (que se lanzará con Visual Studio 2017, supongo) finalmente implementará la /NoWarnopción para suprimir advertencias específicas (así como /WarnAsErrorpara tratar las advertencias específicas o todas las advertencias como errores) .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.