Visual Studio ビルドが失敗しました: exe ファイルを obj\debug から bin\debug にコピーできません 質問する

Visual Studio ビルドが失敗しました: exe ファイルを obj\debug から bin\debug にコピーできません 質問する

アップデート: このバグを再現するサンプルプロジェクトは以下にあります。Microsoft Connectで私はまた、で示された解決策をテストし、検証しました。下記の受け入れられた回答そのサンプル プロジェクトでは機能します。この解決策が機能しない場合は、おそらく別の問題が発生しています (別の質問に属します)。


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

シナリオ: シンプルな Windows フォーム アプリケーション (C#、.NET 4.0、Visual Studio 2010) があります。このアプリケーションには、他のほとんどのフォームが継承する基本フォームがいくつかあり、データベース アクセスには 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' にアクセスできません。このファイルは別のプロセスによって使用されています。」(リビルドを実行すると警告とエラーの両方が表示されますが、ビルドを実行するとエラーのみが表示されます。これは関係ないと思いますか?)

警告とエラー メッセージが何を言っているのかはよくわかります。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。

ベストアンサー1

馬鹿げた話に聞こえるかもしれませんが、Windows 7 で VS2010 を実行して、これらすべての解決策を試しました。名前の変更とビルド以外はどれも機能しませんでした。これは控えめに言っても非常に面倒でした。最終的に、原因を突き止めましたが、信じられません。しかし、AssemblyInfo.cs で次のコードを使用していました...

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

これはよくあることですが、何らかの理由で、バージョンを 2.0.0.0 に変更すると、再び動作するようになりました。Windows 7 特有の現象なのか (使用してまだ 3 ~ 4 週間しか経っていません)、ランダムなのか、それとも何か他の原因なのかはわかりませんが、私の場合はこれで解決しました。VS は生成した各ファイルのハンドルを保持していたので、増分する方法がわかっているのではないかと思います。よくわかりませんし、このような現象は見たことがありません。でも、他にも困っている人がいたら、試してみてください。

おすすめ記事