2011-07-27 2 views
6

CruiseControl.NETとMSBUILD、およびコマンドラインスイッチの1つを使用してビルド時間を改善しようとしていますが、maxcpucountを使ってビルドを並行して行うことができます。私たちのソリューションは60以上のプロジェクトを持っていますので、どんな改善が役に立ちます。しかし、いつでも私まで1以上のmaxcpucount、我々は原因に頻繁にビルドの失敗があります。MSBUILDは "プロセスが別のプロセスによって使用されているため、ファイルxxxxxにアクセスできません"で失敗します。 maxcpucountが1より大きい場合

を「それは 別のプロセスによって使用されているため、プロセスはファイルのXXXXにアクセスすることはできませんのMSBuild」追加の並列ビルドスレッド/プロセスが互いにロックしているようです。

答えて

2

ソリューションファイルから構築していますか?その場合は、直接プロジェクト間の参照を使用し、ソリューションのプロジェクト依存機能を使用していないことを確認してください。あなたが両方のビットを使用している場合は、問題がある可能性があります。 this articleを参照してください。

可能な限りソリューションファイルを削除し、独自のMSBuildファイルを作成してビルドを実行してください。

+1

はい、すべてのプロジェクト参照を含むソリューションファイルを作成しています。 – JNappi

0

あなたのアセンブリは、構築されている別のアセンブリで使用されている可能性があります。各アセンブリが他のアセンブリで必要となる前に構築されていることを確認してください

3

解決策が見つかりました。私が/ nodeReuse:falseスイッチを追加すると、私はファイルロックを取得しないように見えます。これは、nodeReuseの機能がmsbuildプロセスを保持していて、後続のビルドのファイルロックにハングアップしているようです。

http://msdn.microsoft.com/en-us/library/ms164311.aspx

+0

これは実際には機能しませんでした。いくつかのビルドでは良いように見えましたが、最終的には、DLLがロックされているために壊れたビルドで終わりました。 – JNappi

+0

ファイルをロックしているmsbuildは本当ですか?プロセスエクスプローラまたは同様のユーティリティで確認できますか? – Mrchief

関連する問題