Jak pominąć określone ostrzeżenie programu MSBuild

98

Czy istnieje sposób na wyłączenie określonego ostrzeżenia programu MSBuild (np. MSB3253) podczas uruchamiania programu MSBuild z wiersza polecenia? Mój skrypt kompilacji wywołuje msbuild.exe w następujący sposób:

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

Dowiedziałem się, że mogę pominąć ostrzeżenia C # (np. CS0618), używając innego parametru dla msbuild.exe:

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

Jednak to podejście nie działa w przypadku ostrzeżeń programu MSBuild. Może jest jeszcze jedna magiczna właściwość do ustawienia?

Używam .NET 3.5 i VS2008.

Andrzej
źródło

Odpowiedzi:

62

Udało mi się obniżyć poziom ostrzegawczy za pomocą /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
źródło
2
Nie sądzę, żeby to
zadziałało,
6
Tak, jasne. To tak, jakby
wyłączyć
Właśnie wypróbowałem to z MSBuild 15.4.8.50001 i / p: WarningLevel = 0 NIE pomija ostrzeżenia MSBuild MSB3227.
Myślałem, że
2
Wypróbowałem i to
pominie
To jest hack, jeśli naprawdę tego potrzebujesz, ale możesz utworzyć Directory.Build.rsp obok csproj, w którym chcesz pominąć to ostrzeżenie, i dodać zawartość „/ WarnAsMessage: MSBXXXX”.
mjsabby
38

W przypadku MSB3253 możesz po prostu ustawić w pliku projektu (* .csproj), które powodują takie ostrzeżenie.

  <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
źródło
5
Ta odpowiedź dotyczy również MSB3270. Bardzo przydatne, gdy używasz niestandardowego programu do rozpoznawania złożeń do zarządzania obciążeniami zestawów specyficznymi dla platformy.
MOverlund,
16
Czy gdzieś w MS .. jest pełna lista tych magicznych ustawień?
ATV
Czy mógłbyś napisać więcej szczegółów, jak należy to zrobić? który plik? należy zmodyfikować? Czy to działa w przypadku MSB8012?
Gayane
Po prostu nekro to ... Kliknąłem prawym przyciskiem myszy plik * .csproj w Eksploratorze rozwiązań, kliknąłem „Zwolnij projekt”, kliknąłem prawym przyciskiem myszy „Edytuj”. Następnie skopiowałem tę sekcję „ResolveAssembly” do pierwszej grupy właściwości na końcu (zwykle po tagu TargetFrameworkProfile) i zatrzymuje to ostrzeżenie
Steven Wood
31

Zgodnie z tym wątkiem na forum MSDN ostrzeżeń MSBuild nie można pominąć.

Albic
źródło
21
Uwaga: ta odpowiedź jest poprawna w przypadku błędów z programu MSBuild (z prefiksem „MSB”), zgodnie z pytaniem OP. Jeśli Google cię tu sprowadził i chcesz ukryć błędy kompilatora (np. „CS2008”), możesz zrobić to, co zrobił OP: /p:nowarn=2008( usuń „CS” z numeru)
Michael Haren
1
Czy wiesz, czy nadal tak jest?
Martin Ba
Dokumenty MSDN na / nowarn tutaj . Msbuild przekazuje tę zmienną do csc.exe w części jego celu CoreCompile.
Dav Evans
Wydaje się, że nie ma sposobu, aby jednocześnie pomijać ostrzeżenia kompilatora Roslyn i pomijać je w MS-Build. '#pragma warning disable RCS1110 // Deklaruj typ wewnątrz przestrzeni nazw.' po usunięciu RCS przywraca ostrzeżenie kompilatora.
user1431356
11

Dla tych, którzy szukają w Google teraz (jak ja): nadchodzący MSBuild 15.0 (przypuszczam, że zostanie wydany z Visual Studio 2017) w końcu zaimplementuje /NoWarnopcję pomijania określonych ostrzeżeń (a także /WarnAsErrortraktowania określonych ostrzeżeń lub wszystkich ostrzeżeń jako błędów) .

EM0
źródło
0

Nowsze wersje programu MSBuild obsługują to za pośrednictwem wiersza polecenia ( jak wspomniano w EM0 ) lub z właściwościami:

<PropertyGroup>
    <MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3253</MSBuildWarningsAsMessages>
</PropertyGroup>

Aby uzyskać szczegółowe informacje, zobacz ten komentarz .

Nie znalazłem oficjalnej dokumentacji na ten temat, ale jestVerifyFileHash o tym mowa w dokumentacji zadania .

tm1
źródło