如何抑制特定的MSBuild警告

时间:2009-06-21 13:05:06

标签: command-line msbuild

从命令行运行MSBuild时,有没有办法禁用特定的MSBuild警告(例如MSB3253)?我的构建脚本以下列方式调用msbuild.exe:

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

我发现我可以使用msbuild.exe的另一个参数来抑制C#警告(例如CS0618):

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

但是,此方法不适用于MSBuild警告。也许还有另一个魔法属性可以设置?

我正在使用.NET 3.5和VS2008。

6 个答案:

答案 0 :(得分:52)

我设法用/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

答案 1 :(得分:29)

根据MSDN论坛中的this帖子,无法抑制MSBuild警告。

答案 2 :(得分:29)

对于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>

答案 3 :(得分:10)

对于那些谷歌搜索现在(像我一样):即将推出的MSBuild 15.0(将与Visual Studio 2017一起发布,我推测)将最终implement the /NoWarn option来禁止特定警告(以及/WarnAsError到将特定警告或所有警告视为错误。)

答案 4 :(得分:1)

最新版本的MSBuild通过命令行(as mentioned by EM0)或通过以下属性支持此功能:

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

有关详细信息,请参见this comment

我没有找到有关此文档的官方文档,但it is mentioned in the VerifyFileHash task documentation

答案 5 :(得分:1)

替代: 将此添加到.csproj。

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