VS2012 C#プロジェクトのビルド中にこのエラーが発生し続けます
Error 41 Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe".
Exceeded retry count of 10. Failed.
Error 42 Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another
process.
今私はプロセスを殺すことを考え出した
Weingartner.WeinCad.vhost.exe
(時々)働くが、これは私の神経に乗っている。これを止める方法はありますか。
私のデバッガ設定は
Visual Studio 2013でも同様のエラーメッセージが表示されます。
ほとんどの場合、例外が発生してデバッグプロセスが停止したときにこの状況が発生したことがわかりました。
Clean + buildが私にとってこの問題を解決しなかったとき、私は以下をすることによって成功しました:
bin
およびobj
フォルダーを削除するこの「バグ」はVisual Studio 2003から存在しています。
最後に、実行可能ファイルの名前を変更してから削除することで、この問題を解決できることもよくあります。
Visual Studio Premium 2013(Update 3)では、ビルド前のワンライナーでこれを解決しました。
(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)
これにより、古いPDBファイルが適切に削除され(可能であれば)、拡張子.old.pdb
が付いたものの名前が変更されます。良い副作用は、古いPDBがまだロックされている場合、ファイル名に別の.old部分を追加するだけで、次回Visual Studioを再起動してビルドを実行したときにすべて削除されます。
たとえば、ビルド/デバッグセッション1ではMyProject.pdb
がロックされたままになります。
次回のビルド時:MyProject.pdb
- > MyProject.old.pdb
その後、ビルド/デバッグセッション2が開始され、 both MyProject.pdb
とMyProject.old.pdb
はまだロックされています。MyProject.old.pdb
- > MyProject.old.old.pdb
MyProject.pdb
- > MyProject.old.pdb
最後に、Visual Studioを再起動して新しいビルドを実行すると、これらの両方が解消され、通常どおりプロセスが続行されます。
アプリケーションを閉じてしまったからですが、それでもバックグラウンドで実行されています。
一時的な解決策:
恒久的な解決策:コーディングによってアプリケーションを閉じる必要があります。これがコードです...
System.Windows.Forms.Application.Exit();
あなたはこのコードをすべてのフォームのフォームのクロージングイベントに入れる必要があります。例:
private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
System.Windows.Forms.Application.Exit();
}
.vhost.exeはデバッガプロセスなので、デバッグ中のプロセスは正しく閉じられていないようです。たぶん、あなたはそれを生き続けて正しくデバッグプロセスを止めていないバグを持っている - あなたが実際にデバッガを殺す代わりに 'デバッグの中止'をクリックするときプロセスからデタッチするオプションがあるので多分あなたはそのセットを持っている。
しかし、それが問題です - あなたがコピーしようとしているファイルはOSによってロックされているので(すなわち、まだ使用されているので)コピーを妨げています。ファイルが空いていることを確認して、コピーできるようにします。
タスクマネージャでIISExpressをkillすることで解決しました
ウイルス対策を無効にし(特にAvastの場合)、もう一度やり直してください。それは私を助けました。問題は、デバッガ/ビルダーがAvastによって脅威として識別され、VSによって実行される直前に削除された.exeファイルを作成することです。
次のビルド前のアクションを実行することで、この問題を修正できました(VS 2010)。
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
見積もり:
これを回避するには、プロジェクトのPre-build eventコマンドラインプロパティ(build Eventsタブ)にこれを追加します。
コードスニペット
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
場合によっては、Visual Studioでrunning IISExpressの上に(Build || Rebuild)すると、この例外に直面します。
コピーできませんファイル "obj\Debug\YourProjectName.dll"をbin\YourProjectName.dllに。プロセスはアクセスできません _ファイル 'bin\YourProjectName.dll' それは別のプロセスによって使用されています
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul if errorlevel 1 taskkill /f /im "iisexpress.exe"
あなたはいいです2 GO!
プロセスw3wp.exe(IIS)を終了すると、この問題は解決することが多いです。
一般に、binフォルダに移動してそれを削除しようとすることで、ファイルがロックされているプロセスを知ることができます。別のプロセスが使用している場合に表示されるエラーメッセージには、強制終了する必要があるプロセスの名前が含まれます。
マスタープロジェクトtaskkill/f/fiのビルド前イベントに追加します。 "pid gt 0"/im "YourProcess.vshost.exe"
デバッグオプション(opの最初のスクリーンショット - > 2番目のオプション)のBreak all processes when one process breaks
のチェックマークを外して解決したと思います。
チェックを外してからしばらくの間、うまく構築/実行されてきました。
私のプロジェクトでは、MySql NET ConnectorとDevExpressのコントロールを使用しています。このフラグが有効になっているために、そのうちの1つが接続、バインディングなどを破棄していなかった可能性があります。
編集済み:それは間違いなく動作します! 「ファイルをコピーできません」というエラーやフォームデザイナのエラーが発生しなくなりました。
Windows 8上のVS 2012バージョン11.0.60610.01アップデート3で同じ問題に直面しました
開いているデザイナーウィンドウはなく、プロジェクトは単純なコンソールアプリケーションでした。
ファイルにアクセスしているvshostプロセスの削除は、プロセスがファイルにアクセスしていないため、ほとんどの場合はうまくいきません。
最も簡単な回避策は、プロジェクトをソリューションから削除し、別のプロジェクトをソリューション内に構築してから元のプロジェクトを追加することです。
それはいらいらさせ、時間の無駄ですが、私が知っている他のすべての方法の中で最も安価です。
お役に立てれば...
私の10セントの貢献。
私はまだVS 2015 Update 2で時折この問題を抱えています。
私は、コンパイル対象を切り替えることで問題が解決することを発見しました。
試してみてください。あなたがDEBUGに入っているのならRELEASEに切り替えてビルドしてからDEBUGに戻ってください。問題は解決しました。
ステファノ
以下の手順に従ってください
上記の手順は恒久的にエラーを解決しました:)
@ Geoffの( https://stackoverflow.com/a/25251766/3739540 )答えは良いですが、再コンパイル時にエラーコード1をスローします。
これは私のために働いたものです(2> nul 1>最後のnul + 0の出口):
(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0
答えがどれもうまくいかない場合は、この簡単なチェックを試してください。プロジェクトEXEを実行および保持しているMSbuild.exeを探します。 MSBuild.exeを終了してください。
これを防ぐための解決策はありませんが、少なくともロックされたファイル(Windowsエクスプローラ、または従来のコマンドウィンドウ)の名前を変更してからコンパイル/ビルドすることはできます。再起動またはVS201xを再起動する必要はありません。経験があれば、ビルド前のスクリプトを追加して古いファイルを削除したり、ロックが発生した場合に備えて別の名前に変更したりすることができます。
T4テンプレートをデバッグしている の場合、これは常に発生します。私の解決策(MSがこれを修正する前)は、単にこのプロセスを終了させることです。
タスクマネージャ - >ユーザー - > T4VSHostProcess.exe
このプロセスは、T4テンプレートを実行したときではなく、T4テンプレートをデバッグしたときにのみ発生します。
[私のために働く]
この他の答え を参照してください。基本的には、MSBuild.exeプロセスがバックグラウンドでリソースファイルを実行している可能性があります。コマンドラインでMSBuildを起動する前または後のビルドタスクがある場合は、このコマンドに "/ nr:false"フラグを追加してみてください。しかし、やはり、より具体的な詳細については前の答えを参照してください。
私は私の問題を解決するいくつかの答えに気づいた、しかし、万が一誰かが私と同じ問題を抱えている場合に備えて。
コンソールAPPを実行している場合:他に何もしない前に。
前回のビルドで開かれた可能性のあるコンソールウィンドウをすべて閉じていることを確認してください。たとえば、コンソールアプリケーションでコードをテストしていただけで、プログラムを実行したときのコンソールウィンドウが開いていたことに気付きませんでした。私がデバッグしていたそのセッションの間に、ウィンドウは後ろに押しやられて見えなかった。ただ言って、これはあなたの問題かもしれないので、それが問題ではないことを確認してください。
この質問は、次のエラーを探すときの最初の結果です。
ファイル "..."が見つからなかったため、コピーできませんでした。
visual Studio 2013(Update 3)でビルドする場合.
解決策:Visual Studio 2013で "Productivity Power Tools"をアンインストールします。
https://connect.Microsoft.com/VisualStudio/feedback/details/533411
私にとっては、Visual Studioにファイルの書き込み/読み取り/実行を許可しないのは、Avastのウイルス対策ソフトウェアでした。だから私はアンチウイルスの除外リストにVisual Studio 2010/2012フォルダを追加する必要がありました。そしてそのバームの直後...それはうまくいきます。
必ずすべてのインスタンスを閉じてください wcfSvcHost そしてもう一度やり直してください。それは私のために働いた!
私は2つのプロジェクトを同時に実行する必要があるマイクロサービスプロジェクトソリューションに取り組んでいます
最初のプロジェクトのlunchsettings.json
...
"Project#1": {
...
"applicationUrl": "http://localhost:5001",
...
}
2番目のプロジェクトのlunchsettings.json
...
"Project#2": {
...
"applicationUrl": "http://localhost:5001",
...
}
修正するには
最初のプロジェクトのlunchsettings.json
...
"Project#1": {
...
"applicationUrl": "http://localhost:5001",
...
}
secondprojectのlunchsettings.json
...
"Project#2": {
...
"applicationUrl": "http://localhost:5002",
...
}
私はようやくそれを修正します。最初のデバッグexeがまだ実行中のため、最初のデバッグ後にデバッグを続行できないのはなぜですか。そのため、最初のデバッグの後、タスクマネージャ - >プロセスタブ - > [あなたのプロジェクト名exe]に行き、exeプロセスを終了する必要があります。
わたしにはできる :)
これは間違いなくこの問題を取り除くためのスクリプトです:
REM This script is invoked before compiling an Assembly, and if the target file exist, it moves it to a temporary location
REM The file-move works even if the existing Assembly file is currently locked-by/in-use-in any process.
REM This way we can be sure that the compilation won't end up claiming the Assembly cannot be erased!
echo PreBuildEvents
echo $(TargetPath) is %1
echo $(TargetFileName) is %2
echo $(TargetDir) is %3
echo $(TargetName) is %4
set dir=C:\temp\LockedAssemblies
if not exist %dir% (mkdir %dir%)
REM delete all assemblies moved not really locked by a process
del "%dir%\*" /q
REM Assembly file (.exe / .dll) - .pdb file and eventually .xml file (documentation) are concerned
REM use %random% to let coexists several process that hold several versions of locked assemblies
if exist "%1" move "%1" "%dir%\%2.locked.%random%"
if exist "%3%4.pdb" move "%3%4.pdb" "%dir%\%4.pdb.locked%random%"
if exist "%3%4.xml.locked" del "%dir%\%4.xml.locked%random%"
REM Code with Macros
REM if exist "$(TargetPath)" move "$(TargetPath)" "C:\temp\LockedAssemblies\$(TargetFileName).locked.%random%"
REM if exist "$(TargetDir)$(TargetName).pdb" move "C:\temp\LockedAssemblies\$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked%random%"
REM if exist "$(TargetDir)$(TargetName).xml.locked" del "C:\temp\LockedAssemblies\$(TargetName).xml.locked%random%"
REM PreBuildEvent code
REM $(SolutionDir)\BuildProcess\PreBuildEvents.bat "$(TargetPath)" "$(TargetFileName)" "$(TargetDir)" "$(TargetName)"
REM References:
REM http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
REM http://stackoverflow.com/a/2738456/27194
REM http://stackoverflow.com/a/35800302/27194
スクリプトは各VSプロジェクトのビルド前イベントから呼び出す必要があります。
$(SolutionDir)\BuildProcess\PreBuildEvents.bat "$(TargetPath)" "$(TargetFileName)" "$(TargetDir)" "$(TargetName)"
vstest.executionengine.exe process(es)を終了すると、この問題は90%の時間解決されます。それでもうまくいかない場合は、 QTAgent32.exe を削除してから、問題のプロジェクトの/ binフォルダと/ objフォルダを削除してください。
これは私の仕事の日の最も刺激の多い部分です。 :)
時にはそれはDEBUGフォルダをクリアすることができません。私がして働いたことは削除できないファイルの名前を変更することでした。そのため、削除できないフォルダとファイルをすべて消去し、名前を「_old」などに変更します。
デバッガがまだ接続されていて、同じVisual Studioインスタンスでビルドしようとしていることに気づきませんでした。デバッガを止めたら、ビルドできました。
私の場合は、それはResharper Unit Testsランナーでした(それに加えてNUnitテスト、MsTestsにはそのような問題はありませんでした)。プロセスを殺した後、OSまたはVS2013を再起動せずに、プロセスを再構築することができました
私の場合、それは許可の問題でした。管理者としてVisual Studioを実行する必要がありました。
@Gerardの答えは正しかった。
Clean + buildでこの問題を解決できなかった場合、以下を実行して成功しました。
Closing Visual Studio
Deleting the bin and obj folders, and
Reopening Visual Studio.
しかし、コンソールで追加の作業を行う必要がありました。
> Add-Migration Initial
> Update-Database
その後、デバッグを開始し、動作しました。
私はVS 2015でこの問題に遭遇しました。私の環境の理由は追加のStyleCopアドインパスを指定するためにStyleCopAdditionalAddinPaths Include = "..."のためのStyleCopプロジェクト設定の使用でした。このプロジェクト設定を.csprojファイルから削除し、代わりにStyleCop.CSharp.Rules.dllが存在していた場所にStyleCop AddInを手動でコピーしてください。洗練された解決策ではありません、しかし私はこの解決策がこれをした後DLLを決してロックしないことがわかりました。
私の場合(Windows 10、Visual Studio 2015):
タスクマネージャ - >ユーザー - > EndTask => vshost.exe
(それはすぐに再起動し、あなたは再び構築することができます)
最速の方法は、ビルド構成タイプを変更して前の構成に戻ることです。
プライマリWinForm(XAF)プロジェクトをビルドしようとしたときにエラーメッセージが表示されました。アプリケーションを1回しか実行できなかったため、VS2015 IDEをシャットダウンして再構築する前に再起動する必要がありました。プロジェクトのプロパティページ([デバッグ]プロパティページ)を詳しく調べた後、チェックボックスがオンになっていました - [Visual Studioホスティングプロセスを有効にする]。 IDEのチェックを外して再起動したところ、「{project} .exeをコピーできません」というメッセージが表示されずにアプリケーションがビルドされました。
私は同じ問題を抱えていたので、ここで述べたように多くの異なる方法を試しましたが、それらのどれも私のために働かなかった、私のために働いた唯一の解決策:
私のソリューションのDEBUGフォルダからREAD ONLYプロパティを削除する
これをBuildイベントに追加する:存在する場合 "$(TargetPath).locked" del "$(TargetPath).locked"存在しない場合 "$(TargetPath)。存在する場合" lock "" $(TargetPath) "move" $(TargetPath) "" $(TargetPath).locked "
VS2012を使用してWP8のXamlページを編集すると、展開するたびにこれが発生します。
Xamlページを開かないか、プロセスエクスプローラを使用してプロセスXDesProc.exeを強制終了する必要はありません。
このエラーが発生した場合は、プロセスエクスプローラを使用して何が起こっているのかを確認することをお勧めします(たとえ別の問題であっても)。単にプロセス "WeinGartner.WeinCad.exe"を見つけると、それはプロセスを示し、ファイルへのアクセスを処理するはずです(少なくともvhostファイルを削除しても問題が解決しない場合)。
DNNを使う私はMSBuild.Community.Tasks.Targetsファイルを編集してbinパスを変更することで問題を解決しました。
<MSBuildDnnBinPath Condition="'$(MSBuildDnnBinPath)' == ''">$(MSBuildProjectDirectory)\bin</MSBuildDnnBinPath>
IL Support pluginを使用している間にこれが起こりました。
プロジェクトにILファイルがない場合(たとえば最後のファイルを削除したなどの理由で)、質問で説明されているようにビルドが失敗します。
ILのサポートを削除することで問題は解決しました
私の場合は、Visual Studio 2105リモートデバッガが問題でした。タスクマネージャでこのタスクを強制終了すると、Visual Studioで自分のアプリケーションを正常に再構築できました。
System
プロセスが、終了してからもう1分間作業していたEXE上でオープンハンドルを保持していた理由を見つけようとすると、OPと同じエラーになりました。
これは、以前の開発者がIDisposable
オブジェクトをusing(){}
でラップしなかったためです。 IDisposable
オブジェクトが正しく破壊されると、エラーは発生しなくなり、すぐに再構築することができました。
Binフォルダ内のDebugまたはReleaseフォルダの下にあるすべての.cacheファイルを削除します。
この問題は、Visual Studio 2010でも定期的に発生します。VisualStudioを閉じ、bin
ディレクトリとobj
ディレクトリを削除してから再起動すると、1回のビルドで修正されます。それから問題は戻る。私はこのスレッドで他のすべての答えを試してみましたが、どれも私のために働きませんでした。この問題を解決する唯一の方法は、プロジェクト設定に移動して[Visual Studioホスティングプロセスを有効にする]をオフにし、ビルドしてから再度オンにしてから再度ビルドすることです。
私は管理者としてVisual Studioを実行することによって問題を回避することができました。
私もこれに遭遇しました。私が自分で構築したサービスでテストしていたことがわかりました。これは、私のソリューションのプロジェクトの1つの..\bin\releaseディレクトリが不足していました。サービスを実行していましたが、テストに戻る前に停止/アンインストールするのを忘れています。その結果、私が参照しているプロジェクトの1つのbin/releaseサブフォルダから別のプロジェクトのbin/releaseサブフォルダへ移動する必要があるDLLの1つを保持していました。サービスを停止すると問題は解決しました。
これを整理しようとして数時間を費やした後、私はサービスに取り組んでいたことがわかった - あなたの解決策の一部としてサービスを停止することを忘れないでください!
IISをリセットし、DLLを使用しているサービス(おそらくコンソールアプリケーション、Windowsサービスホストアプリケーション、またはIIS)を停止してから試してください。
それは私のために働きました。
これをビルド済みのものに追加します。
(if exist "$(TargetDir)*old.exe" del "$(TargetDir)*old.exe") & (if exist "$(TargetDir)*.exe" ren "$(TargetDir)*.exe" *.old.exe)
私はこれがこの質問に対するすでに膨大な量の回答に追加されているだけであることを理解していますが、完璧ではないにしても、どちらも自分で成功したわけではありません。
.exeを実行しているプロセスがないかタスクマネージャを確認してください。
もう1つ問題があるかもしれませんが、VS 2013では私にとっては簡単です。プロジェクトをクリックしてください。プロパティパネルには、値を持つProject Fileという名前のエントリがあります。
(あなたのプロジェクト名).vbproj
プロジェクト名を変更します - 末尾に-01を追加するなどです。ロックされた元の.Zipファイルはまだ存在しますが、参照されなくなりました...そのため、作業を続行できます。次回コンピュータを再起動すると、そのロックは消え、誤ったファイルを削除することができます。
ほとんどの回答では、プロセスを強制終了するように指示されていますが、プロセスハッカーでは、I で見つけられませんでした。
私は比較的簡単な解決策を見つけました。
private void [your form name here]_FormClosing(object sender, FormClosingEventArgs e)
</code>
Application.Exit
を追加してくださいそのようです:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
</code>
参考画像
これが役に立つことを願っています!この問題は本当に吸いました!
「アプリケーションエクスペリエンス」というサービスを有効にします。
私の場合、VSがコピーできないファイルは、.Taskプロジェクトのファイルなので、問題は、ローカルで実行されるスケジュールされたタスクがいくつかあることです。それらを停止して無効にすると、コピーの問題は解消されました。