特定の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を使用しています。

回答:


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のどこかにありますか?
ATV

これをどのように行うべきか詳細を書いていただけませんか?どのファイル?変更する必要がありますか?これはMSB8012で機能しますか?
ガヤネ2017年

これを壊すために...ソリューションエクスプローラーで* .csprojファイルを右クリックし、[プロジェクトのアンロード]をクリックし、[編集]を右クリックしました。次に、この「ResolveAssembly」セクションを最後の最初のプロパティグループ(通常はTargetFrameworkProfileタグの後ろ)にコピーし、この警告を停止します
Steven Wood

31

MSDNフォーラムのこのスレッドによると MSBuildの警告は抑制できません。


21
注:OPが尋ねたように、この回答はMSBuild(「MSB」で始まる)からのエラーに対して正しいです。Googleがあなたをここに連れてきて、コンパイラエラー(たとえば、「CS2008」)を抑制したい場合は、OPが行ったことを実行できます/p:nowarn=2008(「CS」を数字から取り除きます)
Michael Haren

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特定の警告またはすべての警告をエラーとして扱う) 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.