1. ホーム
  2. c#

[解決済み] Visual Studio build fails: unable to copy exe-file from obj 001debug to bin 001debug

2022-05-01 04:01:08

質問

更新してください。 このバグを再現したサンプルプロジェクトがあります。 マイクロソフトコネクト . で示された解決策もテストして確認しました。 以下の回答が採択されました。 はそのサンプルプロジェクトで動作します。この解決策がうまくいかない場合は、おそらく別の問題(別の質問に属するもの)であると思われます。


これは以前にもStack Overflowや他の場所で質問されたことなのですが、これまで見つけたどの提案も役に立たなかったので、新しい質問をしてみるしかないのです。

シナリオ:私はシンプルなWindowsフォームのアプリケーションを持っています(C#、.NET 4.0、Visual Studio 2010)。それは、他のほとんどのフォームが継承するいくつかの基本的なフォームを持っており、それはデータベースアクセスのためにEntity Framework(およびPOCOクラス)を使用しています。派手さはなく、マルチスレッドでも何でもありません。

問題:しばらくはすべて順調でした。その後、突然、アプリケーションを起動しようとしたときに、Visual Studioがビルドに失敗しました。次のような警告が表示されました。 Unable to delete file '...binDebug[ProjectName].exe'. Access to the path '...binDebug[ProjectName].exe' is denied." というエラーが表示され Unable to copy file 'objx86 FilterDebug[ProjectName].exe' to 'bin FilterDebug[ProjectName].exe'. The process cannot access the file 'binDebug[ProjectName].exe' because it is being used by another process.".このプロセスはファイル'binDebug[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のバグなのでしょうか、もしそうならパッチはあるのでしょうか?それとも、私が何か間違ったことをしたのでしょうか、循環参照かそれに類するものがあるのでしょうか、もしそうなら、どのようにしてそれを知ることができるでしょうか?

どんな提案でも大歓迎です :)

更新しました。 下のコメントにあるように、プロセスエクスプローラーで確認したところ、実際に ファイルをロックしているのはVisual Studioです。

解決方法は?

バカげていると思われるかもしれませんが、私はWindows 7上でVS2010を動かしながら、これらの解決策をすべて試みました。名前の変更とビルド以外はどれもうまくいきませんでしたが、控えめに言っても非常に面倒な作業でした。最終的に、私は犯人を突き止めたのですが、信じがたいことだと思います。しかし、私はAssemblyInfo.csで次のコードを使用していました。

[assembly: AssemblyVersion("2.0.*")]

これは結構多いのですが、なぜかバージョンを2.0.0.0に変更するとまた動くようになりました。Windows7特有のものなのか(まだ3~4週間しか使っていないので)、ランダムなのか、何なのか分かりませんが、これで直りました。私は、VSが生成した各ファイルを管理していたので、どのように増分するか分かっていたのではと推測しています。私は本当によく分からないし、このようなことが起こるのを見たことがありません。しかし、もし他の誰かが同じように髪を引っ張っているのなら、試してみてください。