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.

Andrés
fuente

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
Yag
fuente
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>
Stanislav Berkov
fuente
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.

Álbic
fuente
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) .

EM0
fuente