Як придушити конкретне попередження MSBuild


97

Чи є якийсь спосіб відключити конкретне попередження MSBuild (наприклад, MSB3253) під час запуску MSBuild з командного рядка? Мій сценарій побудови викликає msbuild.exe набагато наступним чином:

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

Я дізнався, що я можу придушити попередження C # (наприклад, CS0618), використовуючи інший параметр для msbuild.exe:

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

Однак такий підхід не працює для попереджень MSBuild. Може бути, встановити ще одну магічну властивість?

Я використовую .NET 3.5 та VS2008.

Відповіді:


61

Мені вдалося придушити рівень попередження /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
Я не думаю, що це працює, якщо ви налаштували рівень попередження для кожного проекту в рішенні більше 0.
si618,

6
Так правильно. Це як розвернути проблему з двигуном у вашому автомобілі, скориставшись стрічкою на приладовій панелі :-)
Какао

Щойно спробував це з MSBuild 15.4.8.50001, та / p: WarningLevel = 0 НЕ придушує попередження MSBuild MSB3227.
Думав

2
Я спробував це, і це придушить попередження компілятора (CS ..), але не попередження MSBuild (MSB ...)
marsze

Це злом, якщо він вам справді потрібен, але ви можете створити Directory.Build.rsp, що прилягає до csproj, для якого потрібно придушити це попередження і додати вміст "/ WarnAsMessage: MSBXXXX".
mjsabby

37

Для MSB3253 ви можете просто встановити у файлі проекту (* .csproj), який викликає таке попередження.

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <!-- some code goes here -->
    <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
        None
    </ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
    <!-- some code goes here -->
  </PropertyGroup>

5
Ця відповідь також стосується MSB3270. Дуже зручно, коли ви використовуєте користувацький резолютор для складання для управління конкретними навантажувачами на платформі.
MOverlund

16
Чи є повний перелік цих магічних налаштувань десь у MS ..?
ATV

Чи можете ви, будь ласка, написати детальніше, як це робити? який файл? слід змінити? Це працює для MSB8012?
Гаяне

Просто, щоб зафіксувати це ... Я правою кнопкою миші натиснув файл * .csproj у Провіднику рішень, Клацнув "Розвантажити проект", Клацнув правою кнопкою "Редагувати". Потім скопіювали цей розділ "ResolveAssembly" в першу групу властивостей наприкінці (зазвичай після тегу TargetFrameworkProfile), і це припиняє це попередження
Стівен Вуд

31

Відповідно до цієї теми на форумі MSDN попередження MSBuild не можна придушувати.


21
Примітка: ця відповідь правильна для помилок з MSBuild (з префіксом "MSB"), як вимагає ОП. Якщо Google привів вас сюди, і ви хочете придушити помилки компілятора (наприклад, "CS2008"), ви можете зробити те, що зробив ОП: /p:nowarn=2008(зняти "CS" з номера)
Michael Haren

1
Чи знаєте ви, чи все ще так?
Мартін Ба

Документи MSDN в / тепер перебувають тут . Msbuild передає цю змінну вниз до csc.exe в частині своєї цілі CoreCompile.
Дав Еванс

Здається, не існує способу як придушити попередження компілятора roslyn, так і придушити їх у MS-Build. '#pragma попередження відключити RCS1110 // Оголосити тип всередині простору імен.' при відхиленні RCS повертає попередження компілятора.
користувач1431356

11

Для тих, хто зараз гуглить (як і я): майбутня версія MSBuild 15.0 (випускається з Visual Studio 2017, я припускаю) нарешті реалізує /NoWarnможливість придушення конкретних попереджень (а також /WarnAsErrorтрактувати або конкретні попередження, або всі попередження як помилки) .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.