Як придушити конкретне попередження 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.