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.