11

プロジェクトのプロパティを使用して、.dll プロジェクトの出力フォルダーを設定しました。これを「出力」と呼びます。

問題は、空の出力フォルダーから、初めてプロジェクトをビルドしたときに問題ないことです。2 回目は、次のエラーが表示されます。

エラー 328 ファイル "obj\Release\MyLibrary.dll" を "......\Output\Release\MyLibrary.dll" にコピーできません。ファイル '......\Output\Release\MyLibrary.dll' は別のプロセスによって使用されているため、プロセスはアクセスできません。

「別のプロセス」は、Visual Studio の vshost.exe です。MyLibrary.dll にアクセスし続けるため、削除または置換できないため、エラーが発生します。これにより、出力フォルダーの MyLibrary.dll が更新されません。ただし、私のソリューションには、これが起こらない他の .dll プロジェクトがあります。

これまでに更新に使用した解決策は、VS を閉じて (vshost.exe を閉じて)、Output\Release\MyLibrary.dll ファイルを削除する .bat ファイルを実行してから、VS を再度開き、そのプロジェクトを再構築することです。 .

私は vshost.exe が正確に何をしているのかほとんど知らないので、この問題を根本から解決するためにどこから始めればよいかわかりません。これが特定の .dll で発生する理由はわかりません。なぜこれが起こるのかを調査するのに役立つアイデアに感謝します。

4

1 に答える 1

15

vshost.exe は、Visual Studio ホスティング プロセスです。これは、EXE をロードしてデバッグを容易にするカスタム CLR ホストです。オフにすることができますが、これには副作用がほとんどありません。[プロジェクト] + [プロパティ] の [デバッグ] タブで、[Visual Studio ホスティング プロセスを有効にする] オプションのチェックを外します。

これで、プログラム内の本当の問題を見つける可能性が高くなります。要求してもプログラムが終了しないという最も一般的な問題があります。引き続きビルド エラーが発生します。DLL のロックを保持している EXE として指定された独自の EXE が表示されます。また、タスク マネージャーの [プロセス] タブにも表示されます。これにより、それを殺すこともできます。

プログラマーがこの問題をどのように再現するかは、私には明確ではありません。F5 の代わりに Ctrl+F5 を押すと確実にこれが実行されます。プログラムを開始するときに常に F5 を押して、デバッガーをすぐにアタッチしてください。Debugger + Stop Debugging を使用すると、プログラムが確実に停止するようになりました。それ以外の場合は、[ツール] + [プロセスにアタッチ] を使用して、後でデバッガーを再度アタッチして、プログラムが何をしているかを調べることができます。

マルウェア対策は言及する価値のある一般的な惨劇です。実行可能ファイルがどこからともなく現れるのを見ると、彼らは興奮しすぎますアバストを使用してから完全にアンインストールする場合、VS とはまったく互換性がありません。

于 2013-10-29T15:48:35.127 に答える