Как подавить конкретное предупреждение MSBuild

98

Есть ли способ отключить конкретное предупреждение 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.

Андрей
источник

Ответы:

62

Мне удалось подавить уровень предупреждения с помощью /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
Да правильно. Это похоже на решение проблемы с двигателем в вашей машине с помощью ленты на приборной панели :-)
cacau
Просто попробовал с MSBuild 15.4.8.50001, и / p: WarningLevel = 0 НЕ подавляет предупреждение MSBuild MSB3227.
Мысль
2
Я попробовал, и это
подавит
Это хитрость, если она вам действительно нужна, но вы можете создать Directory.Build.rsp рядом с csproj, в котором вы хотите подавить это предупреждение, и добавить содержимое «/ WarnAsMessage: MSBXXXX».
mjsabby
38

Для 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»), как просил OP. Если Google привел вас сюда и вы хотите подавить ошибки компилятора (например, «CS2008»), вы можете сделать то же, что и OP: /p:nowarn=2008( уберите «CS» из числа)
Майкл Харен,
1
Вы случайно не знаете, так ли это до сих пор?
Мартин Ба
Документы MSDN по / nowarn здесь . Msbuild передает эту переменную в csc.exe в части своей цели CoreCompile.
Dav Evans
Кажется, не существует способа как подавить предупреждения компилятора roslyn, так и подавить их в MS-Build. '#pragma warning disable RCS1110 // Объявление типа внутри пространства имен.' с удаленным RCS возвращает предупреждение компилятора.
user1431356
11

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

EM0
источник
0

Более поздние версии MSBuild поддерживают это через командную строку ( как указано в EM0 ) или с помощью свойств:

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

Подробнее см. В этом комментарии .

Официальной документации по этому поводу я не нашел, но она упоминается в VerifyFileHashдокументации задачи .

tm1
источник