Como suprimir um aviso específico do MSBuild

97

Existe alguma maneira de desativar o aviso específico do MSBuild (por exemplo, MSB3253) ao executar o MSBuild na linha de comando? Meu script de compilação chama msbuild.exe da seguinte maneira:

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

Descobri que posso suprimir avisos C # (por exemplo, CS0618) usando outro parâmetro para msbuild.exe:

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

No entanto, essa abordagem não funciona para avisos do MSBuild. Talvez haja outra propriedade mágica para definir?

Estou usando .NET 3.5 e VS2008.

Andrew
fonte

Respostas:

61

Consegui suprimir o nível de aviso com /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
fonte
2
Eu não acho que isso funcione se você configurou o nível de aviso para cada projeto na solução para ser maior que 0.
si618
6
Okay, certo. É como desligar o problema do motor do seu carro usando fita adesiva no painel :-)
cacau
Apenas tentei com o MSBuild 15.4.8.50001 e / p: WarningLevel = 0 NÃO suprime o aviso MSBuild MSB3227.
Pensei em
2
Eu tentei e isso suprime os avisos do compilador (CS ..), mas não os avisos do MSBuild (MSB ...)
marsze
Este é um hack se você realmente precisar dele, mas você pode criar um Directory.Build.rsp adjacente ao csproj no qual deseja suprimir esse aviso e adicionar o conteúdo "/ WarnAsMessage: MSBXXXX".
mjsabby
37

Para MSB3253, você pode apenas definir no arquivo de projeto (* .csproj) que causa esse aviso.

  <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
fonte
5
Essa resposta também abrange o MSB3270. Muito útil quando você está usando um resolvedor de montagem personalizado para gerenciar cargas de montagem específicas da plataforma.
MOverlund
16
Existe uma lista completa dessas configurações mágicas em algum lugar da MS ..?
ATV
Você poderia escrever mais detalhes sobre como isso deve ser feito? qual arquivo? deve ser modificado? Isso funciona para MSB8012?
Gayane
Apenas para necro isso ... Cliquei com o botão direito no meu arquivo * .csproj no Solution Explorer, cliquei em "Unload Project", cliquei com o botão direito em "Edit". Em seguida, copiei esta seção "ResolveAssembly" para o primeiro grupo de propriedades no final (geralmente após a tag TargetFrameworkProfile) e interrompeu este aviso
Steven Wood
31

De acordo com este tópico no MSDN Forum, os avisos do MSBuild não podem ser suprimidos.

Albic
fonte
21
Observação: esta resposta está correta para erros do MSBuild (prefixado com "MSB"), conforme solicitado pelo OP. Se o Google trouxe você aqui e você deseja suprimir erros do compilador (por exemplo, "CS2008"), você pode fazer o que OP fez: /p:nowarn=2008(retirar o "CS" do número)
Michael Haren
1
Por acaso você sabe se esse ainda é o caso?
Martin Ba
Documentos do MSDN sobre / nowarn aqui . Msbuild passa essa variável para csc.exe em parte de seu destino CoreCompile.
Dav Evans
Não parece haver uma maneira de suprimir os avisos do compilador roslyn e suprimi-los no MS-Build. '#pragma warning disable RCS1110 // Declare o tipo dentro do namespace.' com o RCS eliminado traz de volta o aviso do compilador.
user1431356
11

Para aqueles que procuram isso no Google agora (como eu): o próximo MSBuild 15.0 (a ser lançado com o Visual Studio 2017, presumo) finalmente implementará a /NoWarnopção de suprimir avisos específicos (bem como /WarnAsErrortratar avisos específicos ou todos os avisos como erros) .

EM0
fonte