更新: このバグを再現するサンプルプロジェクトは、Microsoft Connectにあります。また、以下の承認された回答で提供されているソリューションがそのサンプルプロジェクトで機能することをテストして確認しました。この解決策がうまくいかない場合は、おそらく別の問題が発生しています(別の質問に属しています)。
これは以前スタックオーバーフローと他の場所の両方で尋ねられた質問ですが、これまでに見つけた提案のどれも私を助けてくれなかったので、私は新しい質問をしてみなければなりません。
シナリオ:単純なWindowsフォームアプリケーション(C#、. NET 4.0、Visual Studio 2010)があります。他のほとんどのフォームが継承する2つの基本フォームがあり、データベースアクセスにEntity Framework(およびPOCOクラス)を使用します。派手なもの、マルチスレッドなどはありません。
問題:しばらくの間はすべて順調でした。その後、突然、アプリケーションを起動しようとしたときにVisual Studioがビルドに失敗しました。「ファイル '... bin \ Debug \ [ProjectName] .exe'を削除できません。パス '... bin \ Debug \ [ProjectName] .exe'へのアクセスが拒否されました。」という警告が表示されました。エラー「ファイル 'obj \ x86 \ Debug \ [ProjectName] .exe」を「bin \ Debug \ [ProjectName] .exe」にコピーできません。プロセスはファイル' bin \ Debug \ [ProjectName] .exe」にアクセスできません'別のプロセスで使用されているためです。」(Rebuildを実行すると警告とエラーの両方が表示されますが、Buildを実行するとエラーのみが表示されます-関係ないと思いますか?)
私は警告とエラーメッセージが何を言っているかを完全に理解しています:Visual Studioは、なぜか何らかの理由で同時にロックがかかっている間に、exeファイルを上書きしようとしています。ただし、これは問題の解決策を見つけるのに役立ちません... Visual Studioをシャットダウンして再起動することだけが機能していることがわかりました。その後、いくつかのフォームに変更を加えるまで、ビルドと起動は機能します。その後、同じ問題が発生し、再起動する必要があります...かなりイライラします!
上で述べたように、これは既知の問題であると思われるため、推奨される解決策はたくさんあります。ここですでに試したものをリストアップするだけなので、人々は何をスキップすべきかを知っています。
- 新しいクリーンソリューションを作成し、古いソリューションからファイルをコピーするだけです。
以下をプロジェクトの事前ビルドイベントに追加します。
if exist "$(TargetPath).locked" del "$(TargetPath).locked" if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
以下をプロジェクトプロパティ(.csprojファイル)に追加します。
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
しかし、どれも私にとってはうまくいかなかったので、なぜ私が少しイライラし始めているのかを理解できるでしょう。他にどこを見ればよいのかわからないので、誰かが私に何かを与えることを願っています!これはVSのバグですか?ある場合、パッチはありますか?または、何か間違ったことをしたことがありますか?循環参照などがありますか?
どんな提案も大歓迎です:)
更新:としては、以下のコメントで述べた私もそれが実際にそのプロセスExplorerを使用してチェックしたあるファイルをロックしているVisual Studioの。