如何抑制特定的MSBuild警告

And*_*rew 92 msbuild command-line

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

msbuild.exe MySolution.sln /t:Rebuild /p:Configuration=Release
Run Code Online (Sandbox Code Playgroud)

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

msbuild.exe MySolution.sln /t:Rebuild /p:Configuration=Release /p:NoWarn=0618
Run Code Online (Sandbox Code Playgroud)

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

我正在使用.NET 3.5和VS2008.

小智 53

我设法压制了警告级别 /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
Run Code Online (Sandbox Code Playgroud)

  • 是的 - 对.这就像在仪表板上使用胶带来解决汽车中的电机问题:-) (5认同)
  • 如果您已将解决方案中每个项目的警告级别配置为大于0,我认为这不起作用. (2认同)
  • 我尝试了,这将抑制编译器警告(CS ..)但*不*MSBuild警告(MSB ...) (2认同)

Alb*_*bic 31

根据MSDN论坛中的这个帖子,MSBuild警告无法被抑制.

  • 注意:这个答案对于MSBuild(前缀为"MSB")的错误是正确的,如OP所述.如果谷歌把你带到这里你想要抑制编译器错误(例如"CS2008"),你可以做OP所做的事:`/ p:nowarn = 2008`(从数字中删除"CS") (20认同)

Sta*_*kov 31

对于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>
Run Code Online (Sandbox Code Playgroud)

  • 在MS的某个地方是否有完整的魔术设置列表..? (14认同)
  • 这个答案也涵盖了MSB3270.使用自定义装配解析程序管理平台特定的装配负载时非常方便. (4认同)
  • 有效:`msbuild /p:ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch=None` (3认同)

EM0*_*EM0 10

对于那些谷歌搜索现在(像我):即将推出的MSBuild 15.0(将与Visual Studio 2017一起发布,我推测)将最终实现/NoWarn抑制特定警告选项(以及/WarnAsError将特定警告或所有警告视为错误) .


tm1*_*tm1 6

较新版本的 MSBuild 通过命令行(如 EM0 所述)或属性支持此功能:

<PropertyGroup>
    <MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3253</MSBuildWarningsAsMessages>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此评论

我没有找到关于此的官方文档,但VerifyFileHash任务文档中提到了它


Kon*_* S. 5

替代方法:将此添加到 .csproj。

<PropertyGroup>
  <NoWarn>$(NoWarn);MSB3253</NoWarn>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)