Visual Studio “kopyalanamadı”… derleme sırasında


347

VS2012 C # projemin derlemesi sırasında bu hatayı almaya devam ediyorum

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.    

Şimdi süreci öldürdüğümü anladım

Weingartner.WeinCad.vhost.exe

çalışır (bazen) ama bu sinirleri bozuyor. Bunun olmasını durdurmak için herhangi bir yol var mı?

Hata ayıklayıcı ayarlarım

resim açıklamasını buraya girin resim açıklamasını buraya girin


Benim için Release dizininde el ile başlatılan .exe neden oldu. Sorun, VS'nin hala çalışmakta olan bir yürütülebilir dosyayı kopyalayamamasıydı. Programın pencere kapat düğmesinden sonra asılı kalmaması için kaynakları düzgün bir şekilde temizlemeye çalışacağım.
lahjaton_j

İçinde Çözmek, tipik adımlarla bu sorunu iyi bir özeti vardır bu soruya
LightCC

Windows Defender artık üzerinde çalıştığım VS2019 projesinden .exe sevmediğine karar verdi çünkü bu benim için oldu. Sorun olmadan haftalardır bu konuda çalışıyoruz ama bugün, sanırım yeni bir güncelleme beğenmedi. Kaynak klasörlerimi hariç tutmak zorunda kaldım. Olması durdu.
IronRod

Yanıtlar:


401

Visual Studio 2013'te benzer hata iletileri ile karşılaştım.

Çoğunlukla, bu durumun bir istisna nedeniyle bir hata ayıklama işlemi durdurulduğunda meydana geldiğini gördüm.

Clean + build bu sorunu benim için çözmediğinde, aşağıdakileri yaparak başarılı oldum:

  • Visual Studio'yu kapatma
  • binVe objklasörlerini silme ve
  • Visual Studio yeniden açılıyor.

Bu "hata" Visual Studio 2003'ten beri var.

Son olarak, genellikle yürütülebilir dosyayı yeniden adlandırarak ve sonra silerek bu sorunun üstesinden gelebileceğimi buldum.


8
Burada da aynı, VS2013. Bırakma, yapı eserlerini silme, yeniden başlatma -> hepsi iyi.
cacau

49
Ben aynı sorunu var, ama VS yeniden başlattıktan sonra bir yapı almak ve dosyalar tekrar kilitli ..
Sonic Soul

54
Bu bir çözüm değil, en iyi ihtimalle kısmi bir çözüm. Her 10 dakikada bir VS yeniden başlatmak istemiyorum. Çözeltiyi temizlemek benim için işe yarıyor, ancak her 10 dakikada bir temizlemek de bir çözüm değil.
Efsaneler

7
Deneyimlerime göre, VS2013, hangi makinede geliştiriyor olsam da bunu benim için günde en az 10 kez yapıyor. Böcek daha da kötüleşmiş gibi. Just sayin '
AR

28
VS VS hala hata var.
Akash KC

107

Visual Studio Premium 2013'te (Güncelleme 3), bunu önceden oluşturulmuş bir astarla çözdüm:

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

Bu, eski PDB dosyalarını (varsa) zarif bir şekilde siler, ardından bir .old.pdbuzantıyla kalan her şeyi yeniden adlandırır . Güzel bir yan etkisi, eski PDB hala kilitliyse, dosya adına başka bir .old parçası ekler ve Visual Studio'yu yeniden başlattığınızda ve bir derleme yaptığınızda bunların tümü temizlenir.

Örneğin, oturum / hata ayıklama oturumu 1 MyProject.pdbkilitli bırakır .
Bir daha inşa edişinizde:
MyProject.pdb->MyProject.old.pdb

Sonra oluşturma / ayıklama oturumu 2 başlatılır ve hem MyProject.pdb ve MyProject.old.pdbhala kilitli:
MyProject.old.pdb-> MyProject.old.old.pdb
MyProject.pdb->MyProject.old.pdb

Son olarak, Visual Studio'yu yeniden başlatmak ve yeni bir yapı oluşturmak her ikisinden de kurtulacak ve her zamanki gibi işleme devam edecektir.


5
Aynı VS2010, VS 2012
Boogier

7
Teşekkür ederim, bunun yerine exe dosyalarını kullanma örneğinizi değiştirerek benim için mükemmel çalıştı. Bence bu son VS 2015 CTP'de de bir hata olabilir.
Johny Skovdal

Yardımcı oldu - hala inşa öncesi komutumu ayarladım ve orada olduğunu unuttuğum kadar iyi çalışıyor!
Geoff

3
Bunu prensipte yapmaktan nefret ediyorum, ama işe yarıyor, işte böyle! :) Bu inciyi paylaştığın için teşekkürler Geoff!
kayleeFrye_onDeck

1
En son (2018-03-11) Visual Studio 2017 v15.6.1: hala bir sorun. Hata ayıklama, istisna, hedef dizindeki derlemeler kilitli. * .Pdb ile yukarıdaki çözüm * .dll olarak değiştirilmeye devam etmektedir.
Michiel de Wolde

71

Bunun nedeni başvurunuzu kapatmış olmanızdır, ancak yine de arka planda çalışmaktadır.

Geçici çözüm:

  • Görev Yöneticisi'ne ( Ctrl+ Alt+ Esc) gidin.
  • İşlemler sekmesine gidin ve "YourProjectName.exe" dosyasını bulun.
  • İşleminizi bulamıyorsanız "Tüm kullanıcılardan işlemleri göster" i işaretleyin.
  • Son İşlemi yapın.

Kalıcı çözüm: Kodlama ile başvurunuzu kapatmanız gerekir. İşte kod ...

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

Bu kodu tüm formdaki formun closing olayına koymanız gerekir. Misal:

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

1
Aynen öyleydi. Visual Studio çökmüştü ve IIS Express hala çalışıyordu (benim durumumda). Tek yapmam gereken görev çubuğunu açmak ve IIS Express simgesini sağ tıklayıp çıkmaktı. Teşekkür ederim.
the-nick-wilson

Bu benim için çalıştı; Başka bir işlem onları kullandığından obj ve bin klasörlerini silemedim. Neyse ki Windows 10 aslında adının ne olduğunu söyledi; Görev Yöneticisi'nde kapatıldıktan sonra sorunlar ortadan
kalktı

25

.vhost.exe bir hata ayıklayıcı işlemidir, bu nedenle hata ayıklanan işlem düzgün bir şekilde kapanmamıştır. Muhtemelen onu canlı tutan bir hata var ve hata ayıklama işlemini doğru bir şekilde durdurmuyor - hata ayıklayıcıyı gerçekten öldürmek yerine 'hata ayıklamayı durdur' düğmesini tıklattığınızda, belki de bu kümeye sahipseniz, işlemden ayırma seçenekleri vardır.

Ama sorun bu - kopyalamaya çalıştığınız dosya işletim sistemi tarafından kilitleniyor (yani hala kullanılıyor), bu yüzden kopyalamayı önlüyor. Dosyanın boş olduğundan emin olun ve kopyalayabilirsiniz.


Sorulara hata ayıklayıcı seçeneklerimi ekledim. İşlemi öldürmesi gerektiğinden eminim ama belki bazı seçenekleri anlamıyorum.
bradgonesurfing

In Visual Studio 2019şimdi çıkışı (hepsi değil) bazılarında sürecini bahseder rağmen, ben de benzer bir mesaj alıyorum. Ben üzerinden öldürmek zorunda testhost.x86.exe oldu Task Manager. Bundan sonra test süreçlerinden birini tespit etmeyi bırakmış gibi görünüyordu.
Andez


20

Antivirüsünüzü devre dışı bırakmalısınız (özellikle bir Avast ise) ve tekrar deneyin. Bana yardımcı oldu. Sorun, hata ayıklayıcı / oluşturucu VS tarafından yürütülmeden hemen önce Avast tarafından tehdit olarak tanımlanan .exe dosyası oluşturmak ve bunun için silinmiş olmasıdır.


İyi yakalama. Sonsuza kadar Avast'tan nefret ediyorum.
stackunderflow 14:14

Avast benim için de sorun oldu. Dosya Sistemi Kalkanı'nın devre dışı bırakılması yanıttı. Dışlamalara Visual Studio \ Projects klasörünü eklemeyi denedim ama işe yaramadı.
KeithB

1
Symantec Endpoint korumasında da aynı sorun var. BT departmanında birileri güvenlik seviyesini oldukça yüksek kilitledi :-) Teşekkürler Pitrs.
ssimm

AV veya koruyucu araçlarından birini devre dışı bırakmak yerine, obj \ Debug dizini için rahat kullanım için istisna oluşturabileceğinizi ekleyeceğim.
A. Kali

Teşekkürler! Bunun benim .exe dosyasını engelleyen bir MalwareBytes olduğunu buldum.
NL3294

15

Aşağıdaki inşa öncesi eylem sağlayarak (VS 2010) bu sorunu gidermek mümkün;

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

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

1
@luckyluke, Proje özelliklerinizde, Derleme öncesi komut dosyası ekleyebileceğiniz bölüm vardır. Belirtilen alanda yukarıdaki komut dosyasını kopyalayıp geçip projeyi yeniden oluşturun / uygulamanızı çalıştırın
Nair

13

Alıntı:

Bunun çözümü,> projesinin Derleme öncesi olay komut satırı özelliğine yerleştirmektir (Derleme Etkinlikleri sekmesinde):

Kod Parçacığı

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

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

8

İstisna

Bazı durumlarda, bu özel durumla karşılaştığınız IISExpress'i çalıştırdığınızda (Build || Rebuild) Visual Studio'da :

"Obj \ Debug \ YourProjectName.dll" dosyası bin \ YourProjectName.dll "dosyasına kopyalanamıyor . İşlem 'bin \ YourProjectName.dll' dosyasına erişilemiyor çünkü başka bir işlem tarafından kullanılıyor

Çözüm

  1. Oluşturulması gereken web projesine sağ tıklayın.
  2. Özelliklere tıklayın.
  3. Sol taraftaki Etkinlikler Sekmesini Oluştur'u seçin.
  4. Derleme öncesi olayları komut satırında şu 2 satırı yapıştırın:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

Sen iyi 2 GO!


6

Bir projenin derleme adını değiştirerek sorunu çözüyor gibi görünüyor.

Yani bunun yerine

resim açıklamasını buraya girin

Bunu buna değiştiriyorum

resim açıklamasını buraya girin

Sadece onu değiştiğini Bildirimi Increment and Recalliçin Increment_Recall, sadece boşluk kaldırıldı. Şimdi benim için iyi çalışıyor.


6

W3wp.exe (IIS) işlemini öldürmek genellikle bunu çözer.
Genellikle, bin klasörüne gidip silmeye çalışarak dosya üzerinde kilit olan işlemi öğrenebilirsiniz. Başka bir işlemin kullanılması durumunda, görüntülenecek hata iletisi, öldürülmesi gereken işlemin adını içerir.


4

Windows 8'de VS 2012 Sürüm 11.0.60610.01 Güncelleştirme 3'te aynı sorunla karşılaştım

Tasarımcı penceresi açık değildi ve proje basit bir konsol uygulamasıydı.

Dosyaya erişen vshost işleminin kaldırılması, işlem dosyaya erişmediği için çoğu zaman çalışmaz.

Çalışan ve en az zaman alan en basit çözüm, projeyi çözümden kaldırmak, çözümde başka bir proje oluşturmak ve ardından orijinali geri eklemektir.

Tahriş edici ve zaman kaybıdır, ancak bildiğim diğer tüm seçeneklerden en ucuzudur.

Bu yardımcı olur umarım...


Tek yapmanız gereken Tümünü Yeniden Oluşturmak ve 10 deneme için her şey yolunda. Çok rahatsızlık değil.
Scott Shaw-Smith

@Scott Shaw-Smith Benim için çalışmıyor. Ve gördüğüm diğer yorumlardan bazılarına dayanarak, diğerleri için de işe yaramıyor. Benim durumumda Avast'ın kaldırılması sorunu düzeltti.
user316117

4

Ben Break all processes when one process breakshata ayıklama seçenekleri (op ilk ekran görüntüsü -> ikinci seçenek) onay işareti kaldırarak çözdü düşünüyorum .
İşaretlemediğimden beri bir süredir iyi çalışıyor / çalışıyor.
Projemde MySql NET Connector ve DevExpress denetimlerini kullanıyorum. Bunlardan biri bu bayrak beeing aktive çünkü bağlantıları, ciltleri, vb iyi bertaraf değildi olabilir.

EDİTTİ: kesinlikle işe yarıyor! Artık 'Dosya kopyalanamıyor' ve Form tasarımcı hataları yok.


1
Diğer çözümlerin hiçbiri benim için çalışmadı. Sadece bu. Visual Studio 2017 13.2 kullanıyorum
xleon

4

Ana proje taskkill / f / fi "pid gt 0" / im "YourProcess.vshost.exe" in derleme öncesi etkinliğini ekleyin


Sorunu bu şekilde çözmeyi gerçekten sevmiyorum, ama bu işe yaradı!
Petter T

Bunu problem için en basit çalışma çözümü olarak buldum.
dscharge

4

Benim 10 sent katkım.

Hala VS 2015 Güncelleme 2'de bu sorunu yaşıyorum.

Derleme hedefini değiştirmenin sorunu çözdüğünü buldum.

Şunu deneyin: DEBUG içinde iseniz RELEASE ve build'e geçin, sonra DEBUG'a geri dönün. Sorun gitti.

Stefano


Evet! Bu kadar. Bu sinir bozucu soruna basit bir çözümdür! Tamamen benim için çalıştı. Kolay ve hızlı! Çok teşekkürler.
Meister Schnitzel

1
Benim için çalışıyor! İpucu: Devre dışı bırakılan Hata Ayıkla >> Seçenekler >> Hata Ayıklama >> Genel >> "Yönetilen Uyumluluk Modunu Kullan" geçici çözüm gerekmez!
leon22

4

Aşağıdaki adımları izleyin

  1. Görev Yöneticisini Aç (Ctrl + Alt + Delete)
  2. Performans sekmesi altında < ProjectNameOfYours.exe > öğesini seçin .
  3. İşlemi Sonlandır'ı tıklayın.
  4. Şimdi çözüm oluşturun.

Yukarıdaki adımlar hatayı kalıcı olarak çözdü :)


4

Yanıtların hiçbiri işe yaramazsa bu basit kontrolü deneyin. Projenizi EXE çalıştıran ve tutan herhangi bir MSbuild.exe bulun. MSBuild.exe'yi öldürün ve gitmek için iyi olmalısınız.


2

Bunun olmasını önlemek için bir çözüm veremem ama en azından kilitli dosyayı (windows explorer veya klasik komut penceresi) yeniden adlandırın ve derleyin / derleyin. VS201x'i yeniden başlatmanıza veya yeniden başlatmanıza gerek yoktur. Bazı deneyimlerle, eski dosyaları silmek veya yeniden adlandırmak için bir ön komut dosyası ekleyebilir ve bir kilit olması durumunda yoldan çıkabilirsiniz.


2

Bu diğer cevaba bakınız . Temel olarak, arka plan tüketen kaynak dosyalarında çalışan MSBuild.exe işlemleriniz olabilir. MSBuild'in komut satırı üzerinden başlatılmasına neden olan ön veya son oluşturma görevleriniz varsa, bu komuta "/ nr: false" bayrağını eklemeyi deneyin. Ancak yine, daha ayrıntılı bilgi için önceki cevaba bakınız.


Snap, VS2015 güncelleme 2 - MSBuild aynı sorun var, exe işlemi yeniden inşa önce TaskManager öldürülmesi gerekiyor.
Nick Wright

Josh'un yukarıdaki cevabındaki makale bağlantısı, Visual Studio ve MSBuild işlemi (MSBUILDDISABLENODEREUSE = 1) içinde düğüm yeniden kullanımını devre dışı bırakmak için bir sistem ortamı değişkeninin kullanılmasını önermektedir - bu benim için çalıştı.
Nick Wright

2

Sonunda nasıl düzeltebilirim. İlk hata ayıklama exe hala çalışıyor çünkü neden ilk hata ayıklama sonra hata ayıklama devam edemiyor. Böylece, ilk hata ayıklamadan sonra, Görev Yöneticisi -> İşlem Sekmesi -> [proje adınız exe] 'e gidin.

benim için çalışıyor :)


Vay canına, teşekkürler dostum, tam olarak benim sorunum. Exe çalışırken benim için kullanıcı şifresi istediğinden, ilk kez ateş etmedi. İşlem listesinde bu uygulamayı silmeye ve sonra tekrar hata ayıklamaya çalıştığımda, kusursuz çalıştı.
Chandraprakash

2

@ Geoff'un ( https://stackoverflow.com/a/25251766/3739540 ) yanıtı iyidir, ancak yeniden derleme sırasında hata kodu 1'i atar.

İşte benim için işe yarayan (2> nul 1> nul sonunda + çıkış 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 şablonlarında hata ayıklama yapıyorsanız, bu her zaman olur. Benim çözümüm (MS bunu düzeltmeden önce) sadece bu süreci öldürmek olacaktır:

Görev Yöneticisi -> Kullanıcı -> T4VSHostProcess.exe

Bu işlem yalnızca bir T4 şablonunda hata ayıkladığınızda ortaya çıkar, bir tane çalıştırdığınızda değil.


2

İşte kesinlikle bu sorundan kurtulmak için bir komut dosyası:

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

Komut dosyasının her bir VS projesi öncesi derleme olayından çağrılması gerekir.

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

resim açıklamasını buraya girin


2
  1. Proje özelliklerini açma [menü> proje> özellikler]
  2. "Hata ayıkla" sekmesini seçin
  3. "Görsel stüdyo barındırma işlemini etkinleştir" seçeneğinin işaretini kaldırın
  4. Hata ayıklamaya başla [F5]
  5. Güvenlik uyarısı alacaksınız, sadece "tamam". Uygulamanın çalışmasına izin verir
  6. Hata ayıklamayı durdurun.
  7. Hata ayıklama sekmesi altında "Visual studio barındırma işlemini etkinleştir" seçeneğini işaretleyin,
  8. Şimdi, hata ayıklamayı başlatmayı deneyin, tekrar hata görmeyeceksiniz

[Benim için çalış]


Bu neden -2 idi? Benim için de çalıştı. Sıfır mantıklı ama hey, eğer işe yarıyorsa, işe yarıyor.
Wakka02

Bu kalıcı bir çözüm müdür? yani bu 8 adımı her seferinde yapmak zorunda mısınız?
Arthur Swails

vs17 barındıran işlem seçeneği yok
John Demetriou

1

Bu soru, aşağıdaki hatayı ararken ilk sonuçtu:

"..." dosyası bulunamadığı için kopyalanamadı.

Visual Studio 2013'te (Güncelleme 3) oluştururken.

Çözüm: Visual Studio 2013'te "Verimlilik Elektrikli El Aletleri" nin kaldırılması.

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


TFS'den devralınan proje için bu hatayı birçok kez alıyorum. Bu olduğunu düşündüm! Yüklü programlarda ve eklentilerde bunu aradı. Bu elektrikli el aletleri uygulaması bulunamıyor. Bu nerede saklanır?
Keyifli

1

Benim durumumda Resharper Unit Tests koşucusu (artı NUnit testleri, MsTests ile böyle bir sorun yaşamadım). Süreci öldürdükten sonra, OS veya VS2013'i yeniden başlatmadan işlemi yeniden başlatabildi


Evet, araJetBrains.Resharper.TaskRunner.*
Duncan

1

Hata ayıklayıcının hala bağlı olduğunu ve aynı Visual Studio örneğinde oluşturmaya çalıştığımı fark etmedim. Hata ayıklayıcıyı durdurduktan sonra inşa edebildim.


1

Vstest.executionengine.exe işlem (ler) i öldürmek bu sorunu benim için% 90 oranında çözmektedir. Bu işe yaramazsa, QTAgent32.exe dosyasını öldürmek ve sonra söz konusu proje için / bin ve / obj klasörlerini silmek de işe yarar .

Bu, iş günümün en rahatsız edici kısmı. :)


1

Benim için Visual Studio'nun dosya yazma / okuma / yürütmesine izin vermeyecek Avast antivirüs oldu. Bu yüzden antivirüs hariç tutma listesine Visual studio 2010/2012 klasörünü eklemek zorunda kaldım. Ve o baamdan hemen sonra ... işe yarıyor.


1

Tüm wcfSvcHost örneklerini kapattığınızdan emin olun ve tekrar deneyin. Benim için çalıştı!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.