如何抑制特定的MSBuild警告


97

从命令行运行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。

Answers:


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
是的-对 这就像通过使用仪表板上的胶带来转动汽车中的电动机问题一样:-)
cacau 2014年

刚刚使用MSBuild 15.4.8.50001进行了尝试,并且/ p:WarningLevel = 0不会抑制MSBuild警告MSB3227。
以为

2
我尝试过,这将抑制编译器警告(CS ..),但抑制MSBuild警告(MSB ...)
marsze

如果确实需要,这是一个技巧,但是您可以在要抑制此警告的csproj旁边创建一个Directory.Build.rsp,并添加内容“ / 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 2014年

16
MS ..某处是否有这些魔术设置的完整列表?
亚视

您能否写出更多详细信息,该怎么做?哪个文件?应该修改吗?这对MSB8012有用吗?
Gayane'May

只是为了解决这个问题...我在解决方案资源管理器中右键单击* .csproj文件,单击“卸载项目”,右键单击“编辑”。然后将此“ ResolveAssembly”部分复制到末尾的第一个属性组中(通常在TargetFrameworkProfile标记之后),并停止此警告
Steven Wood,

31

根据MSDN论坛中的主题,不能抑制MSBuild警告。


21
注意:如OP所要求的,此答案对于MSBuild(带有“ MSB”前缀)的错误是正确的。如果Google将您带到这里,并且您想抑制编译器错误(例如“ CS2008”),则可以执行OP所执行的操作:(/p:nowarn=2008从数字中去除“ CS”)
Michael Haren 2013年

1
您是否知道是否仍然如此?
马丁·巴

/ nowarn上的MSDN文档在这里。Msbuild在其CoreCompile目标的一部分将此变量向下传递给csc.exe。
Dav Evans 2014年

似乎没有办法抑制roslyn编译器警告并在MS-Build中禁止它们。'#pragma warning disable RCS1110 //声明名称空间中的类型。RCS下降时,编译器将重新发出警告。
user1431356

11

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.