msbuild.exeを開いたままにし、ファイルをロックする


97

私はmsbuild(.NET 4)を呼び出すTeamCityを使用しています。ビルドが完了した後(ビルドが成功したかどうかは関係ないようです)、msbuild.exeが開いたままで、ファイルの1つをロックするという奇妙な問題があります。これは、TeamCityが試行するたびに作業ディレクトリをクリアしようとすると失敗し、続行できません。

これはほぼ毎回発生します。

私はこれに本当に夢中になっているので、私はできるだけ多くの詳細を提供するよう努めます。

  • サーバーはIntel Core i7、2 GB RAM、Windows Server 2008標準64ビットSP2です。
  • TeamCityでは、msbuildランナーは/mコマンドラインパラメーターで構成されます(複数のコアを使用することを意味します)
  • 問題のファイルは、.NETプロジェクトの1つで参照されている外部DLL と常に同じExternal Tools\Telerik\Telerik.Reporting.Dllです。(External Toolsこの問題を引き起こさない同様のパス構造のディレクトリに含まれる他のいくつかの.DLLファイルがあります)。現在、違いがある場合に備えて、Telerikレポートの試用版を使用しています。
  • 問題が発生すると、msbuild.exe *32タスクマネージャーに常にいくつかのプロセスが一覧表示されます。それらはすべて20-50MBのRAMと0.0%のCPUを使用しています。
  • 1〜3分待つと、msbuild.exeプロセスは自動的に終了し、TeamCityは作業ディレクトリを適切に更新できます。
  • msbuildプロセスを手動で終了した場合、TeamCityの更新はすぐに再び機能します。
  • Windowsではインデックスサービスが無効になっています(ただし、前の2つの点で、msbuild.exeが問題の原因であることはほぼ確認されています)。
  • Telerik.reporting.dllには特別なプロパティはありません。唯一のSVNプロパティはsvn:mime-type = application/octet-stream

誰かがこれに遭遇したことがありますか?

回答:


122

で使用msbuild/nr:falseます。

簡単に言うと、MSBuildは多くのことを高速にしようと試みます。特に並列ビルドの場合です。多くの「ノード」を生成します-プロジェクトをコンパイルできる個々のmsbuild.exeプロセス。プロセスが起動するまでに少し時間がかかるため、ビルドが完了した後、これらのプロセスは停止します(デフォルトでは、15分間、 )、すぐに再構築する場合、これらのノードを「再利用」して、プロセスのセットアップコストを節約できます。ただし、前述のコマンドラインオプションでnodeReuseをオフにすることで、この動作を無効にすることができます。

以下も参照してください。


2
理にかなっています:/ mを削除しても、発生しないようです。私は今/m /nr:false、を使って試しています。いくつかのビルドを実行して、それがどのようになるかを確認します。おかげで
gregmac

26
msbuildオプションを使用してVisual Studioでプロジェクトをビルドするにはどうすればよいですか?
Cameron Taggart

1
まだ知りたいのですが、実際にはC ++ / CLIプロジェクトのVisual Studio 11 Betaバグに遭遇しました。同じ現象
Cameron Taggart

3
時期尚早の最適化は、本当にすべての悪の根源です。あなたは、マイクロソフトを吸う。
johnwbyrd

1
@CameronTaggartプロジェクト/ソリューションフォルダーにホストされている特別なファイルを使用して、msbuildコマンドラインオプションを追加できます。参照してくださいdocs.microsoft.com/en-us/visualstudio/msbuild/...
needfulthing

43

Visual Studio内でノードの再利用を無効にするには、環境変数を使用する必要があります。

MSBUILDDISABLENODEREUSE=1

私はこれを効果的に使用しましたが、現在失敗している別のツールがあります。VS11BetaでC ++をコンパイルするとき、それはmt.exeです。そのために使用する他の変数はありますか?
EugenioMiró12年

VSのどこかでダイアログボックスを使用して設定することはできませんか?
dom_beau 2012年

1
@danこれを見つけてくれてありがとう。Microsoft.VisualStudio.Web.Host.exeも無効にする環境変数があることを祈っています。
jerhewet 2015

例えば等のバッチスクリプト、ビルドサーバー、コマンドラインからビルドを実行しているときにも動作します
デイブE
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.