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.

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

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>

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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.