Visual Studio "Tidak dapat menyalin" ... selama pembuatan


347

Saya terus mendapatkan kesalahan ini selama membangun proyek VS2012 C # saya

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.    

Sekarang saya sudah tahu bahwa membunuh prosesnya

Weingartner.WeinCad.vhost.exe

bekerja (kadang-kadang) tetapi ini membuat saya gugup. Adakah cara untuk menghentikan ini terjadi sama sekali?

Pengaturan debugger saya adalah

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini


Bagi saya itu disebabkan oleh .exe yang diluncurkan secara manual di direktori Release. Masalahnya adalah bahwa VS tidak dapat menyalin melalui executable yang masih berjalan. Saya akan mencoba memperbaikinya dengan membersihkan sumber daya dengan benar sehingga program tidak meninggalkan menggantung setelah tombol tutup jendela.
lahjaton_j

Ada ringkasan yang bagus dari masalah ini dengan langkah-langkah khas untuk diselesaikan dalam pertanyaan ini
LightCC

Ini terjadi bagi saya karena Windows Defender memutuskan tidak lagi menyukai .exe dari proyek VS2019 tempat saya bekerja. Sudah mengerjakan ini selama berminggu-minggu tanpa masalah tetapi hari ini, tebak pembaruan baru tidak menyukainya. Harus mengecualikan folder Sumber saya. Berhenti terjadi.
IronRod

Jawaban:


401

Saya telah menemukan pesan kesalahan serupa di Visual Studio 2013.

Sebagian besar, saya telah menemukan bahwa situasi ini telah terjadi ketika proses debug dihentikan karena pengecualian.

Ketika clean + build belum menyelesaikan masalah ini untuk saya, saya berhasil dengan melakukan hal berikut:

  • Menutup Visual Studio
  • Menghapus bindan objfolder, dan
  • Membuka kembali Visual Studio.

"Bug" ini sudah ada sejak Visual Studio 2003.

Akhirnya, saya juga menemukan bahwa saya sering dapat mengatasi masalah ini dengan hanya mengubah nama file yang dapat dieksekusi dan kemudian menghapusnya.


8
Sama di sini, VS2013. Berhenti, menghapus artefak bangunan, memulai kembali -> semua baik.
cacau

49
saya memiliki masalah yang sama, tetapi setelah memulai kembali VS saya mendapatkan satu build, dan file-file terkunci lagi ..
Sonic Soul

54
Ini bukan solusi, paling tidak solusi parsial. Saya tidak ingin memulai kembali VS setiap 10 menit. Membersihkan solusinya bekerja untuk saya, tetapi membersihkannya setiap 10 menit juga bukan solusi.
Legenda

7
Dari pengalaman saya, VS2013 melakukan ini setidaknya 10 kali sehari untuk saya tidak peduli mesin apa yang saya kembangkan. Sepertinya bug semakin memburuk. Katakan saja '
AR

28
bug masih ada di VS 2019.
Akash KC

107

Dalam Visual Studio Premium 2013 (Pembaruan 3), saya memecahkan ini dengan pra-build one-liner:

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

Ini dengan anggun menghapus semua file PDB lama (jika bisa), lalu mengganti nama apa pun yang tersisa dengan .old.pdbekstensi. Efek samping yang bagus adalah bahwa jika PDB lama masih terkunci, itu hanya menambahkan sepotong .old ke nama file, dan mereka semua akan dibersihkan saat berikutnya Anda me-restart Visual Studio dan melakukan build.

Sebagai contoh, sesi build / debug 1 tidak MyProject.pdbterkunci.
Lain kali Anda membangun:
MyProject.pdb->MyProject.old.pdb

Kemudian, bangun / debug sesi 2 dimulai, dan keduanya MyProject.pdb dan MyProject.old.pdbmasih terkunci:
MyProject.old.pdb-> MyProject.old.old.pdb
MyProject.pdb->MyProject.old.pdb

Akhirnya, me-restart Visual Studio dan melakukan build baru akan menghilangkan keduanya, dan melanjutkan proses seperti biasa.


5
Hal yang sama di VS2010, VS 2012
Boogier

7
Terima kasih, bekerja dengan sempurna untuk saya dengan memodifikasi contoh Anda menggunakan file exe sebagai gantinya. Saya pikir ini mungkin bug di CTP VS 2015 terbaru juga.
Johny Skovdal

Senang itu membantu - saya masih memiliki perintah pre-build saya diatur, dan itu bekerja dengan cukup baik bahwa saya lupa itu ada
Geoff

3
Aku benci harus melakukan ini pada prinsipal, tetapi itu berhasil, jadi begitulah! :) Terima kasih telah berbagi mutiara ini, Geoff!
kayleeFrye_onDeck

1
Terbaru (2018-03-11) Visual Studio 2017 v15.6.1: masih menjadi masalah. Debugging, pengecualian, rakitan di direktori target dikunci. Solusi di atas dengan * .pdb diubah menjadi * .dll masih berlaku.
Michiel de Wolde

71

Itu karena Anda telah menutup aplikasi Anda, tetapi masih berjalan di latar belakang.

Solusi sementara:

  • Buka Pengelola Tugas ( Ctrl+ Alt+ Esc).
  • Buka tab Proses dan cari "YourProjectName.exe".
  • Centang "Tampilkan proses dari semua pengguna" jika Anda tidak dapat menemukan proses Anda.
  • Akhiri Proses itu.

Solusi permanen: Anda harus menutup aplikasi Anda melalui pengkodean. Ini kodenya ...

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

Anda harus memasukkan kode ini ke acara penutupan formulir di semua formulir. Contoh:

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

1
Ini persis seperti itu. Visual Studio mogok dan IIS Express masih berjalan (dalam kasus saya). Yang harus saya lakukan adalah membuka bilah tugas dan klik kanan ikon IIS Express dan keluar. Terima kasih.
the-nick-wilson

Ini bekerja untuk saya; Saya tidak bisa menghapus folder obj dan bin karena proses lain sedang menggunakannya. Untungnya Windows 10 benar-benar mengatakan apa nama itu; setelah ditutup di Task Manager, masalahnya hilang
Novastorm

25

.vhost.exe adalah proses debugger, sehingga tampaknya proses yang sedang di-debug belum ditutup dengan benar. Kemungkinan Anda memiliki bug yang menjaga agar tetap hidup dan tidak menghentikan proses debug dengan benar - ada opsi untuk melepaskan dari proses ketika Anda mengklik 'hentikan debugging' daripada benar-benar membunuh debugger jadi mungkin Anda memiliki set itu.

Tapi itu masalahnya - file yang Anda coba salin dikunci (yaitu masih digunakan) oleh OS sehingga mencegah salinan. Pastikan file itu gratis dan Anda dapat menyalin.


Saya telah menambahkan opsi debugger saya ke pertanyaan. Saya cukup yakin itu harus mematikan proses tetapi mungkin saya tidak mengerti beberapa opsi.
bradgonesurfing

Dalam Visual Studio 2019, saya mendapatkan pesan serupa, meskipun sekarang menyebutkan proses di beberapa output (tidak semua). Itu testhost.x86.exe yang harus saya bunuh via Task Manager. Setelah itu sepertinya berhenti mendeteksi salah satu proses pengujian.
Andez


20

Anda harus menonaktifkan antivirus Anda (terutama jika itu Avast) dan coba lagi. Itu membantu saya. Masalahnya adalah bahwa debugger / builder membuat file .exe yang diidentifikasi sebagai ancaman oleh Avast dan karenanya dihapus tepat sebelum bisa dieksekusi oleh VS.


Tangkapan yang bagus. Saya selamanya membenci Avast.
stackunderflow

Avast juga masalah bagi saya. Menonaktifkan File System Shield adalah jawabannya. Saya mencoba menambahkan folder Visual Studio \ Projects saya ke Pengecualian tetapi itu tidak berhasil.
KeithB

1
Saya memiliki masalah yang sama dengan perlindungan Symantec Endpoint. Seseorang di departemen TI telah menaikkan tingkat keamanan cukup tinggi :-) Terima kasih Pitrs.
ssimm

Saya akan menambahkan, bahwa Anda dapat membuat pengecualian untuk direktori obj \ Debug untuk penggunaan convinient, alih-alih menonaktifkan AV atau salah satu alat pelindungnya.
A. Kali

Terima kasih! Saya menemukan bahwa itu adalah MalwareBytes yang memblokir file .exe saya.
NL3294

15

Saya dapat memperbaiki masalah ini (VS 2010) melalui penyediaan tindakan pra-bangun berikut;

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

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

1
@luckyluke, Di properti proyek Anda, ada bagian di mana Anda dapat menambahkan skrip pra-bangun. Salin dan lewati skrip di atas di area yang ditentukan dan bangun kembali proyek / jalankan aplikasi Anda
Nair

13

Mengutip:

Solusinya adalah dengan meletakkan ini di properti baris perintah acara Pra-bangun proyek> (Di tab Acara build):

Cuplikan Kode

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

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

8

Pengecualian

Dalam beberapa kasus di Visual Studio ketika Anda (Bangun || Membangun kembali) di atas menjalankan IISExpress Anda dihadapkan dengan Pengecualian ini:

Tidak dapat menyalin file "obj \ Debug \ YourProjectName.dll" ke bin \ YourProjectName.dll ". Proses tidak dapat mengakses file 'bin \ YourProjectName.dll' karena sedang digunakan oleh proses lain

Larutan

  1. Klik kanan pada proyek web yang perlu dibangun.
  2. Klik pada properti.
  3. Pilih Build Events Tab di sebelah kiri.
  4. Di Pra-bangun acara, baris perintah tempelkan 2 baris ini:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

Anda baik-baik saja, 2 PERGI!


6

Tampaknya dengan mengubah nama rakitan suatu proyek memperbaiki masalah.

Jadi, bukannya ini

masukkan deskripsi gambar di sini

Saya mengubahnya menjadi ini

masukkan deskripsi gambar di sini

Perhatikan bahwa saya baru saja mengubahnya dari Increment and Recallmenjadi Increment_Recall, saya baru saja menghapus spasi. Sekarang bekerja dengan baik untuk saya.


Hebat itu memecahkan masalah saya. Terima kasih !!
Kiran Joshi

6

Membunuh proses w3wp.exe (IIS) akan sering menyelesaikan ini.
Secara umum, Anda dapat mengetahui proses yang memiliki kunci pada file dengan menavigasi ke folder bin dan mencoba menghapusnya. Pesan kesalahan yang akan muncul, jika proses lain menggunakannya, akan berisi nama proses yang perlu dibunuh.


4

Saya menghadapi masalah yang sama pada VS 2012 Versi 11.0.60610.01 Pembaruan 3 pada Windows 8

Tidak ada jendela desainer terbuka dan proyek itu adalah aplikasi konsol sederhana.

Penghapusan proses vshost mengakses file tidak berfungsi sebagian besar waktu karena proses tidak mengakses file.

Solusi paling sederhana yang berfungsi dan membutuhkan waktu paling sedikit adalah menghapus proyek dari solusi, membangun proyek lain dalam solusi dan kemudian menambahkan yang asli kembali.

Ini adalah iritasi dan buang-buang waktu, tetapi ini adalah yang paling murah dari semua opsi lain yang saya tahu.

Semoga ini membantu...


Yang harus Anda lakukan adalah Rebuild All dan semuanya baik-baik saja untuk 10 percobaan lainnya. Tidak banyak ketidaknyamanan.
Scott Shaw-Smith

@Scott Shaw-Smith Tidak bekerja untuk saya. Dan berdasarkan beberapa komentar lain yang saya lihat, itu tidak bekerja untuk orang lain. Dalam kasus saya mencopot pemasangan Avast memperbaikinya.
user316117

4

Saya pikir saya menyelesaikannya dengan menghapus tanda centang Break all processes when one process breaksdi opsi Debug (tangkapan layar pertama op-> opsi kedua).
Sudah membangun / berjalan dengan baik untuk sementara sejak saya tidak mencentangnya.
Saya menggunakan MySql NET Connector dan kontrol DevExpress di proyek saya. Mungkin salah satu dari mereka tidak membuang koneksi, binding, dll. Baik karena bendera ini diaktifkan.

Diedit: pasti berhasil! Tidak ada lagi 'Tidak dapat menyalin file' dan tidak ada lagi kesalahan perancang formulir.


1
Tidak ada solusi lain yang bekerja untuk saya. Ini satu-satunya. Saya menggunakan Visual Studio 2017 13.2
xleon

1
Baru saja mengujinya di VS2019, tidak bekerja untuk saya
0xBADF00D

4

Tambahkan acara pra-bangun proyek master Anda tugas Anda / f / fi "pid gt 0" / im "YourProcess.vshost.exe"


Jangan terlalu suka memecahkan masalah dengan cara ini, tetapi ini berhasil!
Petter T

Saya telah menemukan ini solusi kerja paling sederhana untuk masalah ini.
dscharge

4

Kontribusi 10 sen saya.

Saya masih memiliki masalah ini sesekali di VS 2015 Pembaruan 2.

Saya menemukan bahwa mengganti target kompilasi memecahkan masalah.

Coba ini: jika Anda berada di DEBUG beralih ke RELEASE dan membangun, lalu kembali ke DEBUG. Masalahnya hilang.

Stefano


Ya! Itu dia. Ini adalah solusi sederhana untuk masalah menjengkelkan ini! Benar-benar bekerja untuk saya. Mudah dan cepat! Terima kasih banyak.
Meister Schnitzel

1
Ini bekerja untuk saya! Petunjuk: Dengan Debug yang dinonaktifkan >> Opsi >> Debugging >> Umum >> "Gunakan Mode Kompatibilitas Terkelola" solusi tidak diperlukan!
leon22

4

Ikuti langkah-langkah di bawah ini

  1. Buka Task Manager (Ctrl + Alt + Delete)
  2. Di bawah tab Performance pilih pilih < ProjectNameOfYours.exe >.
  3. Klik pada End Process.
  4. Sekarang Bangun solusi.

Langkah-langkah di atas menyelesaikan kesalahan secara permanen :)


3

Jika tidak ada jawaban yang berfungsi, coba cek sederhana ini. Temukan untuk MSbuild.exe yang menjalankan dan menahan EXE proyek Anda. Bunuh MSBuild.exe dan Anda harus melakukannya dengan baik.


2

Saya tidak bisa memberikan solusi untuk mencegah hal ini terjadi tetapi Anda setidaknya dapat MEMPERBARUI kembali file yang terkunci (windows explorer, atau jendela perintah klasik) dan kemudian mengkompilasi / membangun. Tidak perlu reboot atau memulai ulang VS201x. Dengan beberapa pengalaman Anda dapat menambahkan skrip pra-bangun untuk menghapus file lama atau mengganti nama lalu keluar dari jalan jika ada kunci.


2

Lihat jawaban lain ini . Pada dasarnya, Anda bisa menjalankan proses MSBuild.exe di latar belakang menggunakan file sumber daya. Jika Anda memiliki tugas membangun pra atau pasca yang menyebabkan MSBuild ditendang melalui baris perintah, coba tambahkan bendera "/ nr: false" ke perintah ini. Tetapi sekali lagi, lihat jawaban sebelumnya untuk perincian yang lebih spesifik.


Snap, saya punya masalah yang sama di VS2015 pembaruan 2 - MSBuild, proses exe harus dibunuh di TaskManager sebelum saya dapat membangun kembali.
Nick Wright

Tautan artikel dalam jawaban Josh di atas menyarankan menggunakan variabel lingkungan sistem untuk menonaktifkan penggunaan kembali node dalam Visual Studio dan proses MSBuild (MSBUILDDISABLENODEREUSE = 1) - ini berfungsi untuk saya.
Nick Wright

2

Saya akhirnya bagaimana memperbaikinya. Mengapa kami tidak dapat melanjutkan debug setelah debug pertama karena exe debug pertama masih berjalan. Jadi, setelah debug pertama, Anda harus pergi ke Task Manager -> Process Tab -> [exe nama proyek Anda] mengakhiri proses exe.

ini bekerja untuk saya :)


Wow, terima kasih kawan, sebenarnya masalah saya. Saat ia meminta kata sandi pengguna untuk saya saat menjalankan exe, pertama kali itu tidak menyala. Ketika saya mencoba untuk menghapus aplikasi itu dalam daftar proses dan kemudian debug lagi, itu berfungsi dengan sempurna.
Chandraprakash

2

@ Geoff ( https://stackoverflow.com/a/25251766/3739540 ) jawabannya bagus, tetapi ia melempar kode kesalahan 1 saat dikompilasi ulang.

Inilah yang bekerja untuk saya (2> nul 1> nul di akhir + keluar 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

Jika Anda men - debug templat T4 , maka ini terjadi setiap saat. Solusi saya (sebelum perbaikan MS ini) akan hanya untuk membunuh proses ini:

Manajer Tugas -> Pengguna -> T4VSHostProcess.exe

Proses ini hanya muncul ketika Anda men-debug template T4, bukan ketika Anda menjalankannya.


2

Berikut ini adalah skrip untuk menyingkirkan masalah ini:

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

Script perlu dipanggil dari setiap acara pra proyek VS build.

$(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

masukkan deskripsi gambar di sini


2
  1. Buka properti proyek [menu> proyek> properti]
  2. Pilih tab "debug"
  3. Hapus centang "Aktifkan proses hosting studio visual"
  4. Mulai debugging [F5]
  5. Anda akan menerima peringatan keamanan, "ok". Memungkinkan aplikasi berjalan
  6. Hentikan debugging.
  7. Periksa opsi "Aktifkan proses hosting studio visual", di bawah tab debug,
  8. Sekarang, coba mulai debugging, Anda tidak akan melihat kesalahan lagi

[Bekerja untukku]


Mengapa ini di -2? Ini juga berhasil bagi saya. Tidak masuk akal, tetapi hei, jika berhasil, itu akan berhasil.
Wakka02

Apakah ini solusi permanen? yaitu apakah Anda harus melakukan 8 langkah ini setiap kali?
Arthur Swails

vs17 tidak memiliki opsi proses hosting
John Demetriou

1

Pertanyaan ini adalah hasil pertama ketika mencari kesalahan berikut:

Tidak dapat menyalin file "..." karena tidak ditemukan.

saat membangun di Visual Studio 2013 (Pembaruan 3).

Solusi: Menghapus Instalasi "Alat Daya Produktivitas" di Visual Studio 2013.

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


Mendapatkan kesalahan ini berkali-kali dalam pembangunan untuk proyek bawaan dari TFS. Kupikir ini dia! Mencari ini di program yang diinstal, dan tambahan. Tidak dapat menemukan aplikasi alat listrik ini. Di mana persembunyian ini?
Taersious

1

Dalam kasus saya itu adalah pelari Resharper Unit Tests (ditambah tes NUnit, tidak pernah memiliki masalah dengan MsTests). Setelah membunuh proses, dapat membangun kembali proses, tanpa me-restart OS atau VS2013


Yap, cariJetBrains.Resharper.TaskRunner.*
Dunc

1

Saya tidak menyadari bahwa saya masih memiliki debugger saya terpasang dan sedang mencoba untuk membangun dalam contoh Visual Studio yang sama. Setelah saya menghentikan debugger saya bisa membangun.


1

Membunuh proses vstest.executionengine.exe menyelesaikan masalah ini 90% dari waktu bagi saya. Jika itu tidak berhasil, maka bunuh juga QTAgent32.exe dan kemudian hapus folder / bin dan / obj untuk proyek yang dimaksud berfungsi.

Ini adalah bagian paling menjengkelkan dari hari kerja saya. :)


1

Bagi saya itu adalah antivirus Avast yang tidak akan membiarkan visual studio untuk menulis / membaca / mengeksekusi file. Jadi saya harus menambahkan folder Visual studio 2010/2012 ke daftar pengecualian antivirus. Dan tepat setelah baam itu ... itu berhasil.


1

Pastikan Anda menutup semua instance wcfSvcHost dan coba lagi. Itu berhasil untuk saya!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.