Bagaimana cara menekan peringatan MSBuild tertentu

97

Apakah ada cara untuk menonaktifkan peringatan MSBuild tertentu (misalnya MSB3253) saat menjalankan MSBuild dari baris perintah? Skrip build saya memanggil msbuild.exe dengan cara berikut:

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

Saya telah menemukan bahwa saya dapat menekan peringatan C # (misalnya CS0618) menggunakan parameter lain untuk msbuild.exe:

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

Namun, pendekatan ini tidak berfungsi untuk peringatan MSBuild. Mungkin ada properti ajaib lain yang harus diatur?

Saya menggunakan .NET 3.5 dan VS2008.

Andrew
sumber

Jawaban:

61

Saya telah berhasil menekan level peringatan dengan /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
sumber
2
Saya rasa ini tidak berfungsi jika Anda telah mengonfigurasi tingkat peringatan untuk setiap proyek dalam solusi menjadi lebih besar dari 0.
si618
6
Ya benar. Itu seperti masalah mematikan motor di mobil Anda dengan menggunakan selotip di dasbor :-)
cacau
Baru saja mencobanya dengan MSBuild 15.4.8.50001, dan / p: WarningLevel = 0 TIDAK menekan peringatan MSBuild MSB3227.
Pikir
2
Saya mencobanya dan ini akan menekan peringatan kompiler (CS ..) tetapi tidak peringatan MSBuild (MSB ...)
marsze
Ini adalah hack jika Anda benar-benar membutuhkannya, tetapi Anda dapat membuat Directory.Build.rsp yang berdekatan dengan csproj tempat Anda ingin menyembunyikan peringatan ini dan menambahkan konten "/ WarnAsMessage: MSBXXXX".
mjsabby
37

Untuk MSB3253 Anda cukup mengatur di file proyek (* .csproj) yang menyebabkan peringatan tersebut.

  <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
sumber
5
Jawaban ini juga mencakup MSB3270. Sangat berguna saat Anda menggunakan resolver perakitan kustom untuk mengelola beban perakitan platform tertentu.
MOverlund
16
Apakah ada daftar lengkap dari pengaturan ajaib ini di suatu tempat di MS ..?
ATV
Bisakah Anda menulis lebih detail bagaimana ini harus dilakukan? file yang mana? harus diubah? Apakah ini berfungsi untuk MSB8012?
Gayane
Hanya untuk necro ini ... Saya mengklik kanan file * .csproj saya di Solution Explorer, Mengklik "Unload Project", Klik Kanan "Edit". Kemudian salin bagian "ResolveAssembly" ini ke dalam grup properti pertama di akhir (Biasanya setelah tag TargetFrameworkProfile) dan ini menghentikan peringatan ini
Steven Wood
31

Menurut utas ini di MSDN Forum, peringatan MSBuild tidak dapat disembunyikan.

Albic
sumber
21
Catatan: jawaban ini benar untuk kesalahan dari MSBuild (diawali dengan "MSB"), seperti yang diminta OP. Jika Google membawa Anda ke sini dan Anda ingin menekan kesalahan kompiler (misalnya "CS2008"), Anda dapat melakukan apa yang dilakukan OP: /p:nowarn=2008(hapus "CS" dari nomor tersebut)
Michael Haren
1
Apakah Anda kebetulan tahu jika hal ini masih terjadi?
Martin Ba
Dokumen MSDN di / nowarn here . Msbuild meneruskan variabel ini ke csc.exe di bagian dari target CoreCompile-nya.
Dav Evans
Tampaknya tidak ada cara untuk menekan peringatan kompiler roslyn dan juga menyembunyikannya di MS-Build. '#pragma warning nonaktifkan RCS1110 // Deklarasikan jenis di dalam namespace.' dengan RCS yang dijatuhkan akan memunculkan peringatan compiler kembali.
pengguna1431356
11

Bagi mereka yang Googling ini sekarang (seperti saya): MSBuild 15.0 mendatang (akan dirilis dengan Visual Studio 2017, saya kira) akhirnya akan menerapkan /NoWarnopsi untuk menekan peringatan tertentu (serta /WarnAsErroruntuk memperlakukan baik peringatan tertentu atau semua peringatan sebagai kesalahan) .

EM0
sumber