So unterdrücken Sie bestimmte MSBuild-Warnungen

97

Gibt es eine Möglichkeit, eine bestimmte MSBuild-Warnung (z. B. MSB3253) zu deaktivieren, wenn MSBuild über die Befehlszeile ausgeführt wird? Mein Build-Skript ruft msbuild.exe folgendermaßen auf:

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

Ich habe herausgefunden, dass ich C # -Warnungen (z. B. CS0618) mit einem anderen Parameter für msbuild.exe unterdrücken kann:

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

Dieser Ansatz funktioniert jedoch nicht für MSBuild-Warnungen. Vielleicht gibt es noch eine andere magische Eigenschaft zu setzen?

Ich verwende .NET 3.5 und VS2008.

Andrew
quelle

Antworten:

61

Ich habe es geschafft, die Warnstufe mit zu unterdrücken /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
quelle
2
Ich denke nicht, dass dies funktioniert, wenn Sie die Warnstufe für jedes Projekt in der Lösung so konfiguriert haben, dass sie größer als 0 ist.
si618
6
Ja, genau. Das ist wie das Ausschalten des Motorproblems in Ihrem Auto mit Klebeband auf dem Armaturenbrett :-)
Cacau
Ich habe es gerade mit MSBuild 15.4.8.50001 versucht und / p: WarningLevel = 0 unterdrückt NICHT die MSBuild-Warnung MSB3227.
Dachte
2
Ich habe es versucht und dies wird Compiler-Warnungen (CS ..) unterdrücken, aber nicht MSBuild-Warnungen (MSB ...)
Marsze
Dies ist ein Hack, wenn Sie ihn wirklich brauchen, aber Sie können eine Directory.Build.rsp neben dem csproj erstellen, in dem Sie diese Warnung unterdrücken möchten, und den Inhalt "/ WarnAsMessage: MSBXXXX" hinzufügen.
mjsabby
37

Für MSB3253 können Sie einfach eine Projektdatei (* .csproj) festlegen, die eine solche Warnung verursacht.

  <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
quelle
5
Diese Antwort gilt auch für MSB3270. Sehr praktisch, wenn Sie einen benutzerdefinierten Baugruppenauflöser verwenden, um plattformspezifische Baugruppenlasten zu verwalten.
MOverlund
16
Gibt es irgendwo bei MS eine vollständige Liste dieser magischen Einstellungen?
ATV
Könnten Sie bitte weitere Details schreiben, wie dies getan werden sollte? welche Datei? sollte geändert werden? Funktioniert das für MSB8012?
Gayane
Nur um dies zu überprüfen ... Ich habe im Projektmappen-Explorer mit der rechten Maustaste auf meine * .csproj-Datei geklickt, auf "Projekt entladen" und mit der rechten Maustaste auf "Bearbeiten" geklickt. Kopieren Sie dann diesen Abschnitt "ResolveAssembly" in die erste Eigenschaftsgruppe am Ende (normalerweise nach dem TargetFrameworkProfile-Tag) und stoppen Sie diese Warnung
Steven Wood
31

Laut diesem Thread im MSDN-Forum können MSBuild-Warnungen nicht unterdrückt werden.

Albic
quelle
21
Hinweis: Diese Antwort ist korrekt für Fehler von MSBuild (mit dem Präfix "MSB"), wie OP gefragt. Wenn Google Sie hierher gebracht hat und Sie Compilerfehler unterdrücken möchten (z. B. "CS2008"), können Sie das tun, was OP getan hat: /p:nowarn=2008( Entfernen Sie das "CS" von der Nummer)
Michael Haren
1
Wissen Sie zufällig, ob dies immer noch der Fall ist?
Martin Ba
MSDN-Dokumente auf / nowarn hier . Msbuild übergibt diese Variable an einen Teil seines CoreCompile-Ziels an csc.exe.
Dav Evans
Es scheint keine Möglichkeit zu geben, Roslyn-Compiler-Warnungen sowohl zu unterdrücken als auch in MS-Build zu unterdrücken. '#pragma warning disable RCS1110 // Typ im Namespace deklarieren.' Wenn RCS gelöscht wird, wird die Compiler-Warnung zurückgesetzt.
user1431356
11

Für diejenigen, die dies jetzt googeln (wie ich): Das kommende MSBuild 15.0 (das vermutlich mit Visual Studio 2017 veröffentlicht wird) wird endlich die /NoWarnOption implementieren , bestimmte Warnungen zu unterdrücken (sowie /WarnAsErrorentweder bestimmte Warnungen oder alle Warnungen als Fehler zu behandeln). .

EM0
quelle