Visual Studioは「コピーできませんでした」…ビルド中


347

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

(時々)動作しますが、これは私の神経になっています。これをまったく止める方法はありますか?

私のデバッガ設定は

ここに画像の説明を入力してください ここに画像の説明を入力してください


私にとっては、Releaseディレクトリで手動で起動された.exeが原因でした。問題は、VSがまだ実行中の実行可能ファイルをコピーできないことでした。リソースを適切にクリーンアップして、ウィンドウの閉じるボタンの後にプログラムがハングしないように修正します。
lahjaton_j

で解決するには、一般的な手順でこの問題の良い要約があり、この質問は
LightCC

これは、Windows Defenderが、私が作業しているVS2019プロジェクトの.exeが不要になったと判断したために起こりました。何週間も問題なくこれに取り組んでいましたが、今日は、新しいアップデートが気に入らなかったと思います。ソースフォルダを除外する必要がありました。起こったのをやめた。
IronRod

回答:


401

Visual Studio 2013で同様のエラーメッセージが発生しました。

ほとんどの場合、この状況は、例外のためにデバッグプロセスが停止したときに発生したことがわかりました。

clean + buildでこの問題が解決しない場合は、次のようにして成功しました。

  • Visual Studioを閉じる
  • binおよびobjフォルダーの削除、および
  • Visual Studioを再度開きます。

この「バグ」はVisual Studio 2003から存在しています。

最後に、実行可能ファイルの名前を変更してから削除するだけで、この問題を解決できることがよくあります。


8
VS2013も同じです。ビルドアーティファクトを終了、削除、再起動->すべて良好。
cacau 2014

49
..私は同じ問題を持っていますが、VSを再起動した後、私は1つのビルドを取得し、ファイルが再びロックを取得
ソニックソウル

54
これは解決策ではなく、せいぜい部分的な解決策です。10分ごとにVSを再起動したくありません。溶液の洗浄は私にとってはうまくいきますが、10分ごとにそれを洗浄することも解決策ではありません。
レジェンド

7
私の経験から、どのマシンで開発しているかに関係なく、VS2013はこれを1日に少なくとも10回実行します。バグが悪化したようです。Just sayin '
AR

28
バグはまだVS 2019に存在する
AkashさんKC

107

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が開始され、そして両方 MyProject.pdbMyProject.old.pdb、まだロックされています:
MyProject.old.pdb- > MyProject.old.old.pdb
MyProject.pdb- >MyProject.old.pdb

最後に、Visual Studioを再起動して新しいビルドを実行すると、これらの両方が取り除かれ、通常どおりプロセスが続行されます。


5
VS2010、VS 2012でも同じ
ブージャー2015年

7
ありがとう、あなたの例を代わりにexeファイルを使用するように変更して、私のために完全に働いた。これは最新のVS 2015 CTPのバグかもしれません。
Johny Skovdal、2015

それが役に立てて嬉しいです-私はまだ私の事前構築コマンドをセットアップしています、そしてそれがそこにあったのを忘れたほど十分にうまくいきます!
Geoff

3
私は原則としてこれをしなければならないのが嫌いですが、うまくいくので、それがあります!:)この真珠を共有してくれてありがとう、ジェフ!
kayleeFrye_onDeck 2015年

1
最新(2018-03-11)Visual Studio 2017 v15.6.1:まだ問題があります。ターゲットディレクトリのデバッグ、例外、アセンブリがロックされています。* .pdbを* .dllに変更した上記のソリューションは引き続き適用されます。
Michiel de Wolde

71

これは、アプリケーションを閉じたが、まだバックグラウンドで実行されているためです。

一時的な解決策:

  • タスクマネージャに移動します(Ctrl+ Alt+ Esc)。
  • [プロセス]タブに移動し、「YourProjectName.exe」を見つけます。
  • プロセスが見つからない場合は、[すべてのユーザーのプロセスを表示する]チェックボックスをオンにします。
  • 処理を終了します。

恒久的なソリューション:コーディングを通じてアプリケーションを閉じる必要があります。ここにコードがあります...

System.Windows.Forms.Application.Exit();

このコードは、すべてのフォームのフォームの終了イベントに配置する必要があります。例:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}

1
これはまさにそれでした。Visual Studioがクラッシュし、IIS Expressがまだ実行されていました(私の場合)。タスクバーを開き、IIS Expressアイコンを右クリックして終了するだけで済みました。ありがとうございました。
ニックウィルソン2017

これでうまくいきました。別のプロセスが使用しているため、objおよびbinフォルダーを削除できませんでした。ありがたいことに、Windows 10はその名前を実際に言っていました。タスクマネージャーで閉じると問題は解消しました
Novastorm

25

.vhost.exeはデバッガプロセスであるため、デバッグ中のプロセスが正しく閉じられていないようです。たぶん、バグを存続させ、デバッグプロセスを正しく停止しないバグがある可能性があります。実際にデバッガーを強制終了するのではなく、「デバッグの停止」をクリックしたときにプロセスから切り離すオプションがあるため、その設定がある可能性があります。

しかし、それが問題です。コピーしようとしているファイルがOSによってロックされている(つまり、まだ使用されている)ため、コピーが妨げられます。ファイルが空いていて、コピーできることを確認してください。


質問にデバッガオプションを追加しました。私はそれがプロセスを殺すはずだと確信していますが、いくつかのオプションを理解していないかもしれません。
ブラッドゴンサーフィン2013

ではVisual Studio 2019、同様のメッセージが表示されますが、出力の一部(すべてではない)でプロセスについて説明しています。私が経由で殺さなければならなかったのはtesthost.x86.exeでしたTask Manager。その後、テストプロセスの1つを検出しなくなったようです。
アンデス


20

アンチウイルスを無効にして(特にアバストの場合)、再試行してください。それは私を助けました。問題は、デバッガー/ビルダーが、アバストによって脅威として識別され、VSによって実行される直前に削除された.exeファイルを作成することです。


良いキャッチ。アバストは永遠に嫌いです。
stackunderflow 2014

私にとってもアバストが問題でした。答えは、ファイルシステムシールドを無効にすることでした。Visual Studio \ Projectsフォルダーを除外に追加しようとしましたが、うまくいきませんでした。
KeithB 14

1
Symantec Endpoint Protectionにも同じ問題があります。IT部門の誰かがセキュリティレベルをかなり高く上げています:-)ありがとうPitrs。
ssimm

さらに、AVまたはその保護ツールの1つを無効にする代わりに、obj \ Debugディレクトリの例外を作成して、便利に使用できるようにすることもできます。
A.カーリー

ありがとう!MalwareBytesが.exeファイルをブロックしていることがわかりました。
NL3294 2017年

15

次のビルド前のアクションを提供することで、この問題(VS 2010)を修正できました。

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

1
@luckyluke、プロジェクトのプロパティには、ビルド前のスクリプトを追加できるセクションがあります。指定された領域に上記のスクリプトをコピーして貼り付け、プロジェクトを再ビルドする/アプリケーションを実行する
Nair

13

見積もり:

回避策は、これを>プロジェクトの(ビルドイベント)タブの(ビルド前イベント)コマンドラインプロパティに配置することです:

コードスニペット

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

8

例外

Visual StudioでIISExpressを実行しているときに(ビルド||再ビルド) すると、次の例外が発生する場合があります。

ファイル "obj \ Debug \ YourProjectName.dll"をbin \ YourProjectName.dll " にコピーできません別のプロセスによって使用されているためプロセスはファイル 'bin \ YourProjectName.dll'にアクセスできません

解決

  1. ビルドが必要なWebプロジェクトを右クリックします。
  2. プロパティをクリックします。
  3. 左側の[ビルドイベント]タブを選択します。
  4. ビルド前のイベントのコマンドラインで、次の2行を貼り付けます。
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

いいね2 GO!


6

プロジェクトのアセンブリ名を変更することで問題が解決したようです。

これの代わりに

ここに画像の説明を入力してください

これに変えます

ここに画像の説明を入力してください

からIncrement and Recallに変更したことに注意してくださいIncrement_Recall。スペースを削除しただけです。現在は問題なく動作しています。


それは私の問題を解決しました。ありがとう!
Kiran Joshi

6

プロセスw3wp.exe(IIS)を強制終了すると、多くの場合これが解決されます。
通常、binフォルダーに移動して削除しようとすることで、ファイルがロックされているプロセスを確認できます。別のプロセスが使用している場合にポップアップするエラーメッセージには、強制終了する必要のあるプロセスの名前が含まれます。


4

Windows 8上のVS 2012バージョン11.0.60610.01 Update 3でも同じ問題に直面しました

開いているデザイナーウィンドウはなく、プロジェクトは単純なコンソールアプリケーションでした。

プロセスがファイルにアクセスしていないため、ファイルにアクセスしているvshostプロセスの削除は、ほとんどの場合機能しません。

機能し、時間もかからない最も簡単な回避策は、ソリューションからプロジェクトを削除し、ソリューションで別のプロジェクトをビルドしてから、元のプロジェクトを再度追加することです。

それは刺激的で時間の無駄ですが、私が知っている他のすべてのオプションの中で最も安価です。

お役に立てれば...


あなたがしなければならないのはすべてを再構築することだけであり、すべてがさらに10回の試行のためにうまくいきます。それほど不便はありません。
Scott Shaw-Smith

@Scott Shaw-Smith私には使えません。そして、私が見た他のコメントのいくつかに基づいて、それは他の人にも機能しません。私の場合、アバストをアンインストールすると修正されました。
user316117 2015

4

Break all processes when one process breaksデバッグオプションのチェックマークを削除して解決したと思います(opの最初のスクリーンショット-> 2番目のオプション)。
チェックを外してからしばらくの間、うまくビルド/実行されています。
プロジェクトでMySql NETコネクタとDevExpressコントロールを使用しています。このフラグがアクティブになっているため、接続、バインディングなどを適切に処理していなかった可能性があります。

編集:間違いなく動作します!「ファイルをコピーできません」、フォームデザイナのエラーは発生しません。


1
他の解決策はどれも私にとってはうまくいきませんでした。これだけです。Visual Studio 2017 13.2を使用しています
xleon

1
VS2019でテストしただけでは機能しません
0xBADF00D

4

マスタープロジェクトtaskkillのビルド前イベントを追加します/ f / fi "pid gt 0" / im "YourProcess.vshost.exe"


この方法で問題を解決したくないのですが、これでうまくいきました!
ペッターT

これが問題に対する最も簡単な解決策であることがわかりました。
dscharge '15年

4

私の10セントの寄付。

VS 2015 Update 2でもこの問題が時々発生します。

コンパイルターゲットを切り替えると問題が解決することがわかりました。

これを試してください:DEBUGにいる場合は、RELEASEに切り替えてからビルドしてから、DEBUGに戻ってください。問題はなくなりました。

ステファノ


うん!それでおしまい。これは、この厄介な問題の簡単な解決策です。完全に私のために働きました。簡単で早い!どうもありがとう。
マイスターシュニッツェル2017年

1
わたしにはできる!ヒント:デバッグ>>オプション>>デバッグ>>全般>>「マネージ互換モードを使用する」を無効にすると、回避策は必要ありません。
leon22

4

以下の手順に従ってください

  1. タスクマネージャーを開く(Ctrl + Alt + Delete)
  2. 下ではパフォーマンス ]タブ<選択選択ProjectNameOfYours.exe >。
  3. [プロセスの終了]をクリックします。
  4. ソリューションを構築します。

上記の手順はエラーを永久に解決しました:)


3

どれもうまくいかない場合は、この簡単なチェックを試してください。プロジェクトEXEを実行および保持しているMSbuild.exeを探します。MSBuild.exeを終了します。これで問題ありません。


2

これを防ぐための解決策はありませんが、少なくともロックされたファイルの名前を変更して(Windowsエクスプローラーまたは従来のコマンドウィンドウ)、コンパイル/ビルドできます。VS201xを再起動または再起動する必要はありません。ある程度の経験があれば、ビルド前のスクリプトを追加して、古いファイルを削除したり、ロックがある場合に備えて、名前を変更したりできます。


2

この他の答えを参照してください。基本的に、MSBuild.exeプロセスをバックグラウンドでリソースファイルを使用して実行することができます。コマンドラインを介してMSBuildを開始させるビルド前またはビルド後のタスクがある場合は、このコマンドに「/ nr:false」フラグを追加してみてください。ただし、より具体的な詳細については、前の回答を参照してください。


スナップ、VS2015 update 2でも同じ問題があります-再ビルドする前に、タスクマネージャーでMSBuild、exeプロセスを強制終了する必要があります。
Nick Wright

上記のジョシュの回答の記事のリンクは、システム環境変数を使用してVisual StudioおよびMSBuildプロセス(MSBUILDDISABLENODEREUSE = 1)内でノードの再利用を無効にすることを提案しています-これは私にとってはうまくいきました。
Nick Wright

2

ようやく修正しました。最初のデバッグ実行ファイルがまだ実行されているため、最初のデバッグの後にデバッグを続行できないのはなぜですか。そのため、最初のデバッグ後、タスクマネージャー->プロセスタブ-> [プロジェクト名exe]に移動して、exeプロセスを終了する必要があります。

わたしにはできる :)


わあ、ありがとう、まさしく私の問題です。exeの実行中にユーザーのパスワードを要求するので、初めて起動しませんでした。プロセスリストでそのアプリを削除してから再度デバッグしようとすると、問題なく動作しました。
Chandraprakash

2

@Geoff(https://stackoverflow.com/a/25251766/3739540)の回答は適切ですが、再コンパイル時にエラーコード1がスローされます。

これが私のために働いたものです(2> nul 1>最後のnul + exit 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

2

T4テンプレートデバッグする場合、これは常に発生します。私の解決策(MSがこれを修正する前)は、このプロセスを殺すことです:

タスクマネージャー->ユーザー-> T4VSHostProcess.exe

このプロセスは、T4テンプレートをデバッグするときにのみ表示され、T4テンプレートを実行するときには表示されません。


2

この問題を確実に取り除くためのスクリプトを次に示します。

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)"

ここに画像の説明を入力してください


2
  1. プロジェクトのプロパティを開く[メニュー>プロジェクト>プロパティ]
  2. 「デバッグ」タブを選択します
  3. 「ビジュアルスタジオホスティングプロセスを有効にする」のチェックを外します
  4. デバッグを開始する[F5]
  5. セキュリティ警告が表示されますが、「OK」です。アプリケーションを実行できます
  6. デバッグを停止します。
  7. [デバッグ]タブの[ビジュアルスタジオホスティングプロセスを有効にする]オプションをオンにします。
  8. 今、デバッグを開始してみてください、あなたは再びエラーを見ることはありません

[私のために働く]


なぜこれは-2でしたか?それも私のために働いています。それは意味がありませんが、もしそれがうまくいけば、うまくいきます。
Wakka02 16

これは永続的な解決策ですか?つまり、これらの8つのステップを毎回行う必要がありますか?
Arthur Swails 2017

vs17にはホスティングプロセスオプションがありません
John Demetriou

1

この質問は、次のエラーを探す最初の結果でした。

ファイル「...」が見つからなかったため、コピーできませんでした。

Visual Studio 2013(Update 3)でビルドする場合。

解決策:Visual Studio 2013で「生産性向上ツール」をアンインストールします。

https://connect.microsoft.com/VisualStudio/feedback/details/533411


TFSから継承されたプロジェクトのビルドでこのエラーを何度も取得します。これだと思った!インストールされているプログラム、およびアドインでこれを検索しました。この電動工具アプリケーションが見つかりません。これはどこに隠れますか?
Taersious

1

私の場合、それはResharperユニットテストランナー(およびNUnitテスト、MsTestsでこのような問題が発生したことはありません)でした。プロセスを強制終了した後、OSまたはVS2013を再起動せずにプロセスを再構築できました


はい、探しますJetBrains.Resharper.TaskRunner.*
Dunc

1

デバッガーがまだ接続されていて、同じVisual Studioインスタンスでビルドしようとしていることに気付きませんでした。デバッガーを停止すると、ビルドできました。


1

キリングvstest.executionengine.exeプロセス(複数可)は、この問題を私のために時間の90%を解決します。それが機能しない場合は、QTAgent32.exeを強制終了してから、問題のプロジェクトの/ binおよび/ objフォルダーを削除しても機能します。

これは私の仕事の中で最も苛立たしい部分です。:)


1

私にとっては、Visual Studioにファイルの書き込み/読み取り/実行を許可しないのはアバストアンチウイルスでした。そのため、ウイルス対策の除外リストにVisual Studio 2010/2012フォルダーを追加する必要がありました。そしてその直後に...それはうまくいきます。


1

すべてのインスタンスwcfSvcHostを必ず閉じて、再試行してください。それは私のために働いた!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.