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

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

7 ответов

Мне удалось подавить уровень предупреждения с /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

Для 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>

Согласно этой теме на форуме MSDN предупреждения MSBuild не могут быть подавлены.

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

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

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

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

Альтернатива: добавьте это в.csproj.

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

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

На момент написания этой публикации (2021 г.) документы Microsoft рекомендуют DisabledWarnings, это сработало для меня:

      <PropertyGroup>
    <DisabledWarnings>3568</DisabledWarnings>
</PropertyGroup>

Обратите внимание, что префикс «MS» опущен.

Другие вопросы по тегам