web-dev-qa-db-ja.com

Visual Studio "ビルドできませんでした" ....ビルド中

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

(時々)働くが、これは私の神経に乗っている。これを止める方法はありますか。

私のデバッガ設定は

enter image description hereenter image description here

307
bradgonesurfing

Visual Studio 2013でも同様のエラーメッセージが表示されます。

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

Clean + buildが私にとってこの問題を解決しなかったとき、私は以下をすることによって成功しました:

  • Visual Studioを閉じる
  • binおよびobjフォルダーを削除する
  • Visual Studioを再起動します。

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

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

317
Gerard

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.pdbMyProject.old.pdbはまだロックされています。
MyProject.old.pdb - > MyProject.old.old.pdb
MyProject.pdb - > MyProject.old.pdb

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

105
Geoff

アプリケーションを閉じてしまったからですが、それでもバックグラウンドで実行されています。

一時的な解決策:

  • タスクマネージャに移動します(Ctrl + Alt + Esc).
  • [プロセス]タブに移動し、 "YourProjectName.exe"を見つけます。
  • 自分のプロセスが見つからない場合は、[すべてのユーザーからのプロセスを表示]をオンにします。
  • それを処理します。

恒久的な解決策:コーディングによってアプリケーションを閉じる必要があります。これがコードです...

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

あなたはこのコードをすべてのフォームのフォームのクロージングイベントに入れる必要があります。例:

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

.vhost.exeはデバッガプロセスなので、デバッグ中のプロセスは正しく閉じられていないようです。たぶん、あなたはそれを生き続けて正しくデバッグプロセスを止めていないバグを持っている - あなたが実際にデバッガを殺す代わりに 'デバッグの中止'をクリックするときプロセスからデタッチするオプションがあるので多分あなたはそのセットを持っている。

しかし、それが問題です - あなたがコピーしようとしているファイルはOSによってロックされているので(すなわち、まだ使用されているので)コピーを妨げています。ファイルが空いていることを確認して、コピーできるようにします。

25
gbjbaanb

タスクマネージャでIISExpressをkillすることで解決しました

21
pat capozzi

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

20
Pitrs

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

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

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

見積もり:

これを回避するには、プロジェクトのPre-build eventコマンドラインプロパティ(build Eventsタブ)にこれを追加します。

コードスニペット

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

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
12
Zheng Qiang

例外

場合によっては、Visual Studioでrunning IISExpressの上に(Build || Rebuild)すると、この例外に直面します。

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

溶液

  1. 構築する必要があるWebプロジェクトを右クリックします。
  2. プロパティをクリックしてください。
  3. 左側の[Build Events]タブを選択します。
  4. Pre-build eventsコマンドラインに次の2行を貼り付けます。
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

あなたはいいです2 GO!

6
iTachi

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

6
Ogglas

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

だからこれの代わりに

enter image description here

これに変更

enter image description here

Increment and RecallからIncrement_Recallに変更したことに注意してください。スペースを削除しただけです。 それは今私にはうまく働いています。

5
Cary Bondoc

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

4
sofsntp

デバッグオプション(opの最初のスクリーンショット - > 2番目のオプション)のBreak all processes when one process breaksのチェックマークを外して解決したと思います。
チェックを外してからしばらくの間、うまく構築/実行されてきました。
私のプロジェクトでは、MySql NET ConnectorとDevExpressのコントロールを使用しています。このフラグが有効になっているために、そのうちの1つが接続、バインディングなどを破棄していなかった可能性があります。

編集済み:それは間違いなく動作します! 「ファイルをコピーできません」というエラーやフォームデザイナのエラーが発生しなくなりました。

4

Windows 8上のVS 2012バージョン11.0.60610.01アップデート3で同じ問題に直面しました

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

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

最も簡単な回避策は、プロジェクトをソリューションから削除し、別のプロジェクトをソリューション内に構築してから元のプロジェクトを追加することです。

それはいらいらさせ、時間の無駄ですが、私が知っている他のすべての方法の中で最も安価です。

お役に立てれば...

4
Ashwin J

私の10セントの貢献。

私はまだVS 2015 Update 2で時折この問題を抱えています。

私は、コンパイル対象を切り替えることで問題が解決することを発見しました。

試してみてください。あなたがDEBUGに入っているのならRELEASEに切り替えてビルドしてからDEBUGに戻ってください。問題は解決しました。

ステファノ

3
Stefano.net

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

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

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

3
Akshay Bagi

@ 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
2
Michael Ribbons

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

2
Gentleman

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

2
hopperpl

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

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

このプロセスは、T4テンプレートを実行したときではなく、T4テンプレートをデバッグしたときにのみ発生します。

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

[私のために働く]

2
Novpiar Effendi

この他の答え を参照してください。基本的には、MSBuild.exeプロセスがバックグラウンドでリソースファイルを実行している可能性があります。コマンドラインでMSBuildを起動する前または後のビルドタスクがある場合は、このコマンドに "/ nr:false"フラグを追加してみてください。しかし、やはり、より具体的な詳細については前の答えを参照してください。

2
Josh Pavoncello

私は私の問題を解決するいくつかの答えに気づいた、しかし、万が一誰かが私と同じ問題を抱えている場合に備えて。

コンソールAPPを実行している場合:他に何もしない前に。

前回のビルドで開かれた可能性のあるコンソールウィンドウをすべて閉じていることを確認してください。たとえば、コンソールアプリケーションでコードをテストしていただけで、プログラムを実行したときのコンソールウィンドウが開いていたことに気付きませんでした。私がデバッグしていたそのセッションの間に、ウィンドウは後ろに押しやられて見えなかった。ただ言って、これはあなたの問題かもしれないので、それが問題ではないことを確認してください。

1
Eric Bishard

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

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

visual Studio 2013(Update 3)でビルドする場合.

解決策:Visual Studio 2013で "Productivity Power Tools"をアンインストールします。

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

1
despuestambien

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

1
Alex

必ずすべてのインスタンスを閉じてください wcfSvcHost そしてもう一度やり直してください。それは私のために働いた!

1
Ocelot

私は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",
  ...
}
1
Issam

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

わたしにはできる :)

1
chevhfghfghfgh

これは間違いなくこの問題を取り除くためのスクリプトです:

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

enter image description here

vstest.executionengine.exe process(es)を終了すると、この問題は90%の時間解決されます。それでもうまくいかない場合は、 QTAgent32.exe を削除してから、問題のプロジェクトの/ binフォルダと/ objフォルダを削除してください。

これは私の仕事の日の最も刺激の多い部分です。 :)

1
dgundersen

時にはそれはDEBUGフォルダをクリアすることができません。私がして働いたことは削除できないファイルの名前を変更することでした。そのため、削除できないフォルダとファイルをすべて消去し、名前を「_old」などに変更します。

1
Allan Zeidler

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

1
Valamas

私の場合は、それはResharper Unit Testsランナーでした(それに加えてNUnitテスト、MsTestsにはそのような問題はありませんでした)。プロセスを殺した後、OSまたはVS2013を再起動せずに、プロセスを再構築することができました

1
Uriil

私の場合、それは許可の問題でした。管理者としてVisual Studioを実行する必要がありました。

1
Tonatio

@Gerardの答えは正しかった。

Clean + buildでこの問題を解決できなかった場合、以下を実行して成功しました。

Closing Visual Studio
Deleting the bin and obj folders, and
Reopening Visual Studio.

しかし、コンソールで追加の作業を行う必要がありました。

> Add-Migration Initial
> Update-Database

その後、デバッグを開始し、動作しました。

0
iDeveloper

私はVS 2015でこの問題に遭遇しました。私の環境の理由は追加のStyleCopアドインパスを指定するためにStyleCopAdditionalAddinPaths Include = "..."のためのStyleCopプロジェクト設定の使用でした。このプロジェクト設定を.csprojファイルから削除し、代わりにStyleCop.CSharp.Rules.dllが存在していた場所にStyleCop AddInを手動でコピーしてください。洗練された解決策ではありません、しかし私はこの解決策がこれをした後DLLを決してロックしないことがわかりました。

0
nkanani

私の場合(Windows 10、Visual Studio 2015):

タスクマネージャ - >ユーザー - > EndTask => vshost.exe

(それはすぐに再起動し、あなたは再び構築することができます)

0
Adi

最速の方法は、ビルド構成タイプを変更して前の構成に戻ることです。

0
Ehsan Mohammadi

プライマリWinForm(XAF)プロジェクトをビルドしようとしたときにエラーメッセージが表示されました。アプリケーションを1回しか実行できなかったため、VS2015 IDEをシャットダウンして再構築する前に再起動する必要がありました。プロジェクトのプロパティページ([デバッグ]プロパティページ)を詳しく調べた後、チェックボックスがオンになっていました - [Visual Studioホスティングプロセスを有効にする]。 IDEのチェックを外して再起動したところ、「{project} .exeをコピーできません」というメッセージが表示されずにアプリケーションがビルドされました。

Visual Studioホスティングプロセスの目的は何ですか?

0
Tim P

私は同じ問題を抱えていたので、ここで述べたように多くの異なる方法を試しましたが、それらのどれも私のために働かなかった、私のために働いた唯一の解決策:

  1. 私のソリューションのDEBUGフォルダからREAD ONLYプロパティを削除する

  2. これをBuildイベントに追加する:存在する場合 "$(TargetPath).locked" del "$(TargetPath).locked"存在しない場合 "$(TargetPath)。存在する場合" lock "" $(TargetPath) "move" $(TargetPath) "" $(TargetPath).locked "

0
Adel N. Toosi

VS2012を使用してWP8のXamlページを編集すると、展開するたびにこれが発生します。

Xamlページを開かないか、プロセスエクスプローラを使用してプロセスXDesProc.exeを強制終了する必要はありません。

このエラーが発生した場合は、プロセスエクスプローラを使用して何が起こっているのかを確認することをお勧めします(たとえ別の問題であっても)。単にプロセス "WeinGartner.WeinCad.exe"を見つけると、それはプロセスを示し、ファイルへのアクセスを処理するはずです(少なくともvhostファイルを削除しても問題が解決しない場合)。

0
Luke

DNNを使う私はMSBuild.Community.Tasks.Targetsファイルを編集してbinパスを変更することで問題を解決しました。

<MSBuildDnnBinPath Condition="'$(MSBuildDnnBinPath)' == ''">$(MSBuildProjectDirectory)\bin</MSBuildDnnBinPath>
0
live-love

IL Support pluginを使用している間にこれが起こりました。

プロジェクトにILファイルがない場合(たとえば最後のファイルを削除したなどの理由で)、質問で説明されているようにビルドが失敗します。

ILのサポートを削除することで問題は解決しました

0
Regis Portalez

私の場合は、Visual Studio 2105リモートデバッガが問題でした。タスクマネージャでこのタスクを強制終了すると、Visual Studioで自分のアプリケーションを正常に再構築できました。

0
David Cader

Systemプロセスが、終了してからもう1分間作業していたEXE上でオープンハンドルを保持していた理由を見つけようとすると、OPと同じエラーになりました。

これは、以前の開発者がIDisposableオブジェクトをusing(){}でラップしなかったためです。 IDisposableオブジェクトが正しく破壊されると、エラーは発生しなくなり、すぐに再構築することができました。

0
ajeh

Binフォルダ内のDebugまたはReleaseフォルダの下にあるすべての.cacheファイルを削除します。

0
alwaysVBNET

この問題は、Visual Studio 2010でも定期的に発生します。VisualStudioを閉じ、binディレクトリとobjディレクトリを削除してから再起動すると、1回のビルドで修正されます。それから問題は戻る。私はこのスレッドで他のすべての答えを試してみましたが、どれも私のために働きませんでした。この問題を解決する唯一の方法は、プロジェクト設定に移動して[Visual Studioホスティングプロセスを有効にする]をオフにし、ビルドしてから再度オンにしてから再度ビルドすることです。

0
Drew Chapin

私は管理者としてVisual Studioを実行することによって問題を回避することができました。

0
Shahin

私もこれに遭遇しました。私が自分で構築したサービスでテストしていたことがわかりました。これは、私のソリューションのプロジェクトの1つの..\bin\releaseディレクトリが不足していました。サービスを実行していましたが、テストに戻る前に停止/アンインストールするのを忘れています。その結果、私が参照しているプロジェクトの1つのbin/releaseサブフォルダから別のプロジェクトのbin/releaseサブフォルダへ移動する必要があるDLLの1つを保持していました。サービスを停止すると問題は解決しました。

0
Rob

これを整理しようとして数時間を費やした後、私はサービスに取り組んでいたことがわかった - あなたの解決策の一部としてサービスを停止することを忘れないでください!

0
Joe

IISをリセットし、DLLを使用しているサービス(おそらくコンソールアプリケーション、Windowsサービスホストアプリケーション、またはIIS)を停止してから試してください。

それは私のために働きました。

0
Rohit Patel

これをビルド済みのものに追加します。

(if exist "$(TargetDir)*old.exe" del "$(TargetDir)*old.exe") & (if exist "$(TargetDir)*.exe" ren "$(TargetDir)*.exe" *.old.exe)
0
tmighty

私はこれがこの質問に対するすでに膨大な量の回答に追加されているだけであることを理解していますが、完璧ではないにしても、どちらも自分で成功したわけではありません。

0
drlff

.exeを実行しているプロセスがないかタスクマネージャを確認してください。

0
Jesus Manuel

もう1つ問題があるかもしれませんが、VS 2013では私にとっては簡単です。プロジェクトをクリックしてください。プロパティパネルには、値を持つProject Fileという名前のエントリがあります。

(あなたのプロジェクト名).vbproj

プロジェクト名を変更します - 末尾に-01を追加するなどです。ロックされた元の.Zipファイルはまだ存在しますが、参照されなくなりました...そのため、作業を続行できます。次回コンピュータを再起動すると、そのロックは消え、誤ったファイルを削除することができます。

0
den232

私は完全な解決策を見つけました!

ほとんどの回答では、プロセスを強制終了するように指示されていますが、プロセスハッカーでは、I で見つけられませんでした。

私は比較的簡単な解決策を見つけました。

  1. フォームデザイナで主フォームを選択します。
  2. プロパティメニューの[イベント]タブをクリックします。
  3. イベントFormClosingをダブルクリックします。これにより、イベントシステムと機能が自動的に生成されます。

private void [your form name here]_FormClosing(object sender, FormClosingEventArgs e) </code>

  1. この関数内にApplication.Exitを追加してください

そのようです:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    Application.Exit();
}
 </code>

参考画像

enter image description here

enter image description here

これが役に立つことを願っています!この問題は本当に吸いました!

修正2

「アプリケーションエクスペリエンス」というサービスを有効にします。

0
Kelvin Wang

私の場合、VSがコピーできないファイルは、.Taskプロジェクトのファイルなので、問題は、ローカルで実行されるスケジュールされたタスクがいくつかあることです。それらを停止して無効にすると、コピーの問題は解消されました。

0
electrodrel