2011-12-19 7 views
1

インクリメンタルビルドに切り替えるために、スピードアップするためにインクリメンタルビルドに切り替えました。 this MSDN pageで説明し、私は私のビルドプロジェクトに以下の情報を追加しました:TFS/MSBuildがインクリメンタルビルドを実装した後に静的コンテンツを破る

<PropertyGroup> 
     <SkipClean>true</SkipClean> 
     <SkipInitializeWorkspace>true</SkipInitializeWorkspace> 
     <ForceGet>false</ForceGet> 
    </PropertyGroup> 

すべてうまく働いたと建物はLOT速くなります。最近、私は私のビルドを壊すこれらのタイプのエラーを取得してきた:

[任意のCPU /リリース] C:\プログラム ファイル\ MSBuildのマイクロソフト\ VisualStudioを\のV9.0 \ \ webアプリケーション\ Microsoft.WebApplication。ターゲット(60,3): エラーMSB3021: "IMAGES \ tab \ black.gif"ファイルを "D:\ Build \ Binaries \ Release_PublishedWebsites \ MyApp \ IMAGES \ tab \ black.gif"にコピーできません。 'D:¥Build¥Binaries¥Release_PublishedWebsites¥MyApp¥IMAGES¥tab¥black.gif' のパスへのアクセスが拒否されました。

この問題は、時にはに発生します。 dll(他にはSOと同じですが)常に.gifまたは.cssファイル(静的コンテンツ)です。どのようにこれらのタイプのファイルがロックされている可能性がありますか?

次のビルドの問題を解決する一時バイナリディレクトリを削除します...しかし、これは正しい解決策ではありません。

答えて

1

ビルドでも同じ問題がありましたが、インクリメンタルビルドは実行していません。

私が思いついた問題の回避策は、これは防ぐ必要があり、あなたのビルド定義を編集し、(なし)から出力クリーンワークスペースオプション(過程で>2.基本)を設定することですそれは起こることから。これは私たちのビルドに多すぎるオーバーヘッドを追加しませんでしたが、SSD上で行われます。

私はそれがいくつかのファイルには、まだそれらに設定されている読み取り専用のフラグでコピーされる問題だと思うが、それを把握することはできませんでした。

+0

インクリメンタルビルドを無効にしたため、これは回避策ではありません。ワークスペースオプションを[出力]に設定すると、ビルド前にすべてのプロジェクトでクリーンターゲットが呼び出され、プロジェクトを再度ビルドする必要があります。出力オプションは、デプロイメントに使用されるビルドに役立ちます。変更は段階的に取得され、プロジェクトは再構築されます。 – Ludwo

0

ソリューションに複数のウェブサイトプロジェクトがあるようです。すべてのWebサイトは同じD:\ Build \ Binaries \ Release_PublishedWebsites \ MyAppフォルダに公開されます。 2つ以上のWebサイトで同じイメージ名をコンテンツとして使用しています。これらのウェブサイトプロジェクトが並行して構築される場合、ウェブサイトは同時に構築されることがあります。 1つのウェブサイトプロジェクトがそのコンテンツを出力フォルダにコピーしようとしている間に、他のウェブサイトプロジェクトが既に同じコンテンツをターゲットフォルダにコピーしています。

+0

これは私の最初の考えでしたが、私はWebアプリケーション間でリソースを共有していません(dllだけですが、決して失敗しません)。私は並列にビルドするように私のプロジェクトを構成していないし、それがデフォルトでそのように構築されているかどうかはわかりません。 –

+0

同じ参照を使用している場合、参照されているプロジェクトにいくつかのコンテンツファイルが含まれている場合、Webサイト間で共有リソースを持つことができます。コンテンツファイルは、参照されたdllと共にウェブサイトの出力フォルダにコピーされます。あなたは別のフォルダにあなたのウェブサイトを構築しようとすることはできますか?次に、1つのWebサイトのみがイメージフォルダを使用しているかどうかを確認できます。 – Ludwo

関連する問題