Comment supprimer l'avertissement MSBuild spécifique

98

Existe-t-il un moyen de désactiver l'avertissement MSBuild spécifique (par exemple MSB3253) lors de l'exécution de MSBuild à partir de la ligne de commande? Mon script de construction appelle msbuild.exe de la manière suivante:

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

J'ai découvert que je pouvais supprimer les avertissements C # (par exemple CS0618) en utilisant un autre paramètre pour msbuild.exe:

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

Cependant, cette approche ne fonctionne pas pour les avertissements MSBuild. Peut-être y a-t-il une autre propriété magique à définir?

J'utilise .NET 3.5 et VS2008.

Andrew
la source

Réponses:

62

J'ai réussi à supprimer le niveau d'avertissement avec /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
la source
2
Je ne pense pas que cela fonctionne si vous avez configuré le niveau d'avertissement pour chaque projet de la solution pour être supérieur à 0.
si618
6
Oui en effet. C'est comme résoudre le problème du moteur de votre voiture en utilisant du ruban adhésif sur le tableau de bord :-)
cacau
Je viens de l'essayer avec MSBuild 15.4.8.50001, et / p: WarningLevel = 0 ne supprime PAS l'avertissement MSBuild MSB3227.
Pensé le
2
Je l'ai essayé et cela supprimera les avertissements du compilateur (CS ..) mais pas les avertissements MSBuild (MSB ...)
marsze
C'est un hack si vous en avez vraiment besoin, mais vous pouvez créer un Directory.Build.rsp adjacent au csproj dans lequel vous souhaitez supprimer cet avertissement et ajouter le contenu "/ WarnAsMessage: MSBXXXX".
mjsabpar
38

Pour MSB3253, vous pouvez simplement définir dans le fichier projet (* .csproj) qui provoque un tel avertissement.

  <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
la source
5
Cette réponse couvre également MSB3270. Très pratique lorsque vous utilisez un résolveur d'assemblage personnalisé pour gérer les charges d'assemblage spécifiques à la plate-forme.
MOverlund
16
Existe-t-il une liste complète de ces paramètres magiques quelque part chez MS ..?
ATV
Pourriez-vous s'il vous plaît écrire plus de détails sur la façon dont cela devrait être fait? quel fichier? doit être modifié? Cela fonctionne-t-il pour MSB8012?
Gayane
Juste pour necro ceci ... J'ai cliqué avec le bouton droit sur mon fichier * .csproj dans l'Explorateur de solutions, cliqué sur "Décharger le projet", cliqué droit sur "Modifier". Puis copié cette section «ResolveAssembly» dans le premier groupe de propriétés à la fin (généralement après la balise TargetFrameworkProfile) et il arrête cet avertissement
Steven Wood
31

D'après ce fil du forum MSDN, les avertissements MSBuild ne peuvent pas être supprimés.

Albic
la source
21
Remarque: cette réponse est correcte pour les erreurs de MSBuild (préfixées par "MSB"), comme OP l'a demandé. Si Google vous a amené ici et que vous souhaitez supprimer les erreurs du compilateur (par exemple "CS2008"), vous pouvez faire ce que OP a fait: /p:nowarn=2008(enlever le "CS" du numéro)
Michael Haren
1
Savez-vous si c'est toujours le cas?
Martin Ba
Documents MSDN sur / nowarn ici . Msbuild transmet cette variable à csc.exe dans une partie de sa cible CoreCompile.
Dav Evans
Il ne semble pas y avoir de moyen à la fois de supprimer les avertissements du compilateur Roslyn et de les supprimer dans MS-Build. '#pragma warning disable RCS1110 // Declare type inside namespace.' avec RCS abandonné ramène l'avertissement du compilateur.
user1431356
11

Pour ceux qui recherchent ceci maintenant (comme moi): le prochain MSBuild 15.0 (à paraître avec Visual Studio 2017, je présume) implémentera/NoWarn enfin l' option permettant de supprimer les avertissements spécifiques (ainsi que /WarnAsErrorde traiter les avertissements spécifiques ou tous les avertissements comme des erreurs) .

EM0
la source