Komut kopyası bina oluştururken kod 4 ile çıkıldı - Visual Studio yeniden başlatma onu çözer


151

Arada sırada (7 projeyle) çözümümü oluşturduğumda, Visual Studio 2010 Premium ed'de korkunç 'Kod 4 ile çıkılan Komut kopyası' hatası alıyorum.

Bunun nedeni, derleme sonrası olayın gerçekleşememesidir.

Sorunu geçici olarak çözen şey

  • Bazen: Visual Studio'nun yeniden başlatılması ve çözümü oluşturabiliyorum
  • Bazen: Visual Studio'nun yeniden başlatılması ve tercih edilen dosya yöneticim (Q-Dir 4.37) bunu çözer.

Yapım sonrası etkinliği şöyle görünür:

xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y

Komut kopyası kod [değer gir] hatasıyla çıktığında, bunun nedeni normalde aşağıdakilerdir:

  • okuma / yazma izinleri
  • Kayıp dosyalar
  • yanlış dizinler

Ancak - açıkçası çözümü oluşturduğum zaman, sorun yok.

Bilginize, iki hafta önce ReSharper 5.1.1'i kaldırdım ve Visual Studio o zamandan beri bana bazı hatalar veriyor (aralarında hata ayıklama yapamıyor). Visual Studio'yu yeniden yükledim ve o zamandan beri daha iyi çalışıyor, ancak yine de bu sorunu alıyorum. Bazı ReSharper'ların bir yerlerde olmasıyla ilgili olabilir mi?

Aynı sorunu yaşadınız ve çözdünüz mü? Yoksa herhangi bir olası çözümünüz var mı?

Yanıtlar:


74

Ben her zaman bir dosya kilitleme sorunu olarak buldum. Kod 4 Dosyaya Erişilemiyor. Bulduğum bir kısmi çözüm, xcopy (hata halinde devam eden) için / C seçeneğini kullanmaktır. Gerçekten bir çözüm değil ama çoğunlukla yapılarımın başarısız olmasını engelledi.

Yalnızca 32 bit üzerinde çalışan başka bir çözüm , kopyalamadan önce dosyadaki windows tutamaçlarını serbest bırakmak için kilit açma aracını kullanmaktır .

Düzenleme: Sadece 64 bit altında çalıştığını fark ettim.


3
/ C seçeneğini yukarıdaki xcopy komutuna ekledim ve yapı başarılı oldu. Teşekkürler! Unlocker zaman zaman paha biçilmezdir.
Martin S Ek

2
Dosyalardan biri salt okunur olduğu için bu sorunu yaşadım. Bunu değiştirdiğimde işe yaradı.
Bob Horn

Ayrıca, bu sorunun dosyaları rahatsız eden salt okunur izni kaldırarak çözüldüğünü de kanıtlayabilirim. Açıklanan soruna neden olan harici bir bin klasörünüz var. Salt okunur özniteliğini kaldırdığımda, çözüm oluşturmaya çalışırken hata kayboldu.
eniacAvenger

3
İşaret ettiğiniz bu kilit, hemen hemen her şey tarafından bir virüs olarak algılanıyor. (google güvenli tarama şeyler, eset, virustotal ...). burada bu konuda bir tartışma var gibi görünüyor cnet.com/forums/discussions/unlocker-contains-malware-558941
v.oddou

Bu cevabın kaç yaşında olduğunu hatırlayın. İddia ettiğiniz virüs aslında, yükleyicide kilitli yazılımın kendisine değil, paketlenmiş gibi görünen reklam gereçleri gibi görünüyor.
Preet Sangha

196

İken /Chataları göz ardı edebilir başarılı olması yapı için sırayla kopyalanabilir MUTLAKA dosyaları olabilir gibi gerçek bir çözüm olmayabilir.

En yaygın sorun, önceden tanımlanmış komut etiketlerinin (örneğin $TargetDir) etrafındaki eksik tırnaklardır . Kod veya TFS'de çeşitli dallar ve yollar oluşturduğunda, bunun gerçekleşmesi için çok yüksek bir şans vardır.

Bazen dosya salt okunursa, sorunlara da neden olur. /RSalt okunur dosyaların kopyalanmasına izin verme seçeneğini ekleyin . Mevcut seçeneklerin listesini şu adreste bulabilirsiniz:

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true

Başka bir olası sorun, temel klasöre erişilememesidir. Öyleyse, "start xcopy"yerine performans göstermeye çalışın "xcopy". Bu, başka bir komut penceresi açacak, ancak yönetici ayrıcalıklarına sahip olacaktır.


53
'start' benim için düzeltti ... diğer forumlardan bu, hedefin kutumda 'Herkes' için FullControl olmasına rağmen, 'start'ın çözdüğü bir izin sorunu gibi görünüyor. Ayrıca, pencere titremesini en aza indirmek için 'start / MIN xcopy ...'
komutunu çalıştırabilirsiniz

2
C: \ windows \ system32 \ xcopy.exe $ (TargetPath) <hedef yolu> 'nu c: \ windows \ system32 \ xcopy.exe "$ (TargetPath)" <hedef yolu> olarak değiştirdim ve son 50+ oluşturur.
Ocak'ta pennyrave

1
"$ (OutDir) $ (TargetFileName)" kullandım, "$ (TargetPath)" olarak değiştirmek sorunu çözer. 'Start' kullanarak olduğu gibi!
surfen

Benim sorunum, tire yerine üst klasör adından birinde en-dash karakteri kullanarak geliyor gibi görünüyor. Şube klasörünün adını "1234 - ABCD" gibi bir şey olan kopya / yapıştırma hatası yaptım. "1234 - ABCD" olarak yeniden adlandırıldı ve xcopy şimdi iyi çalışıyor.
Sudeep

katma startve /R... her ihtimale karşı, emin hile yaptı ama işe yaradı hangisi! Teşekkürler!
sǝɯɐſ

19

Aynı hatayı geçtim, ancak dosyanın kilitli olmasından kaynaklanmıyor, ancak dosya eksik.

VS'nin mevcut olmayan bir dosyayı kopyalamaya çalışmasının nedeni, Derleme Sonrası olay komutudur.

Bunu temizledikten sonra sorun çözüldü.

GÜNCELLEME:

@Rhughes'ın yorumladığı gibi:

Asıl mesele, komutu kaldırmak yerine burada çalışmasını sağlamaktır.

ve kesinlikle haklı.

resim açıklamasını buraya girin


1
Yapım sonrası sırasında bir dosya kopyalıyorsanız, bunun nedeni buraya bir komut girmiş olmanızdır. Asıl mesele, komutu kaldırmak yerine burada çalışmasını sağlamaktır.
13:49

9

Ben de bu sorunla karşılaştım.Çok hata penceresinde sonucu kontrol edin.

Benim durumumda \(kullandığım gibi $(TargetDir)) bir kuyruklama xcopy çöküyordu . Benim durumumda $(SolutionDir)..\bin. Başka bir çıktı kullanıyorsanız, bunun ayarlanması gerekir.

start xcopyDerleme sonrasında hata giderildiyse, bunu düzeltmediğini de unutmayın . Komut satırı tarafından bastırılmış olabilir ve aslında hiçbir dosya kopyalanmamıştır!

Btw komut satırında xcopy komutlarınızı manuel olarak yürütebilirsiniz. Orada yürüttüğünüzde sizi doğru yöne yönlendirerek daha fazla ayrıntı alacaksınız.


Aynı şey benim için $ (OutDir) ile oldu. Görünüşe göre tüm yol makrolarının sonunda "\" var ve xcopy çöküyor
Leo Kolezhuk

6

Post build olayının, build çıktısını bazı dizine kopyalamak için copy / xcopy komutunu içermesi durumunda (genellikle en yaygın post build işlemi), kaynak veya hedef hedeflerin tam dizin yolunun aşağıdakileri içeren klasör adlarını içermesi durumunda sorun oluşabilir alanlarda. Dizin ad (lar) ı için alanı kaldırın ve deneyin.


5

Birçok sitede belirtildiği gibi, bunun çeşitli nedenleri vardır. Benim için Kaynak ve Hedef uzunluğu (Yol uzunluğu) kaynaklanıyordu. Komut isteminde xcopy'yi denedim ve tüm kaynağı ve yolu yazamadım (bazı karakterlerden sonra yazmanıza izin vermeyecek). Daha sonra yol uzunluğunu azalttım ve koşabildim. Bu yardımcı olur umarım.


4

VS'yi Yönetici modunda çalıştırın ve iyi çalışmalıdır.


1
Yönetici olarak VS çalıştırıyorum ama bu benim için çalışmadı.
Arafat

Bazı kullanıcılar Yönetici modunda çalışamayabilir.
MrSpudtastic

3

TFS Yapı Hizmeti altında çalışan kullanıcı hesabının hedef klasöre yazma izinleri olmadığı için bu hatayı aldım. Right-click on the folder-->Properties-->Security.


"Tangodancer" ve "Abdul Rahman" a şapka çıkar. Klasöre sağ tıklayın -> Özellikler -> Güvenlik, tek başına bir XP SP3 sisteminde benim için sorunu çözdü Teşekkür ederiz

3

Bu birden fazla durumda olabilir:

  1. Dize yolunun tamamı 254 karakterden uzun olduğunda.
  2. Kopyalanacak dosyanın adı yanlış olduğunda.
  3. Hedef yol yanlış olduğunda.
  4. Kopyalanan dosya veya hedef klasörde salt okunur özniteliği ayarlandığında.

2

Dosya başka bir durumda açıldığı için bu hatayı aldım.

Dosyayı kapatıp tekrar çözümü yeniden oluşturduğumda başarıyla kopyalandı.


2

Yapım bittikten sonra XCOPY durumunda da aynı sorunla karşılaştım. Benim durumumda, klasörlerde ayarlanan SADECE OKUMA izinleri nedeniyle sorun oluyordu.

XCOPY'den önce attrib -R komutunu ekledim ve sorunu çözdü.

Umarım birine yardım eder!


2

Test Motoru ile bağlantılı olarak xcopy ile aynı hatayla karşılaştım. VisualStudio Professional 2013 kullanıyorum. Varsayılan olarak Test -> Test Ayarları -> Test Yürütme Motorunu Çalıştırmaya Devam Et, xcopy ile hata kodum 4'ün nedeni gibi görünüyor. Kapatmak sorunu çözdü. Yürütme altyapısı, bazı .dlls tutmak tutun gibi görünüyor.


1

Ben de aynı problemi yaşadım. VS'deki basit bir 'Temiz Çözüm' hatayı temizledi, ancak geçici bir çözümdü.


Bu sorunu alıyorum ve "Temiz Çözüm" bana yardımcı olmadı. "Temiz Çözüm" her zaman işinize yarıyor mu?
qxotk

1

Dosyanın Çıktı Dizine Kopyala parametresini Her Zaman Kopyala olarak ayarlamanın kilitleme sorununu çözdüğünü gördüm. Her ne kadar şimdi dosyaların 2 kopyası var ve birini silmem gerekiyor.


1

Ben de aynı problemi yaşadım. Ancak, benim için hiçbir şey işe yaramadı. Sorunu ekleyerek çözdüm

exit 0

benim kodum. Sorun ben dosyaları kopyalama yaparken, bazen son dosya bulunamadı ve yarasa sıfır olmayan bir değer döndürdü oldu.

Umarım bu birine yardımcı olur!


1

Windows 7'yi çalıştırıyorsanız, yeni 'robocopy' komutunu deneyebilirsiniz:

robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)"

Robokopi hakkında daha fazla bilgiyi burada bulabilirsiniz .


1

Aynı sorunla karşılaştım. Yapım sonrası etkinlikleri sildim ve çalışmaya başladı. Bazı SQL bileşenleri eklediğimizde, post build komutları da ekleyebiliriz.


1

/ Exclude seçeneği ile bir xcopy kullanarak benzer bir şey alıyorum. Benim durumumda, post-build olayını (komuttan sonra yeni satır gibi zararsız bir şey) düzenlemenin ve projeyi kaydetmenin hatanın olmasına neden olduğunu buldum. / Exclude seçeneğinde belirtilen dosyayı yeniden kaydetmek dosyanın yeniden çalışmasına neden olur.


1

Bir DLL kütüphanesi yazarken, programın bulabileceği ve yükleyebileceği kütüphaneyi kopyalamak için xcopy komutunu kullandım. Programı birkaç kez açıp kapadıktan sonra, hala tanımadığım görevde açık bir süreç vardı.

Dosyanın kullanılabileceği herhangi bir işlemi arayın ve kapatın.


1

Benim için ne düzeltti : istediğiniz proje için özel bir çözüm aşağı kazmak yani tüm projeler için genel çözüm dosyası DEĞİL.

Deneyin - burada belirtilen her şeyi denedim ama boşuna.


1

Burada bunun bir web uygulaması olduğunu önerecek bir şey görmüyorum ama bu sorunu kendim yaşadım - bir post-build etkinliğinde iki xcopy komutu aldım ve bunlardan sadece biri başarısız oldu. Bir şey dosyada bir kilit vardı ve Visual Studio değildi (yeniden başlatmayı denediğim gibi.)

Ben inşa dll kullanırdı tek şey IIS oldu. Ve bakalım,

Basit bir iisresetşey benim için hile yaptı.


1

Aynı sorunu yaşadım. Bunun nedeni aynı bayrağın iki kez olmasıdır, örneğin:

if $ (ConfigurationName) == Sürüm (xcopy "$ (TargetDir) . " "$ (SolutionDir) Dağıtım \ $ (ProjectName) \" / e / d / i / y / e)

"/ E" bayrağının iki kez göründüğüne dikkat edin. Kopyayı kaldırmak sorunu çözdü.


1

Benim durumumda $(OutDir)basitçe ..\..\Build\göreceli bir yol vardı. Ve aşağıdaki gibi xcopy yapmaya çalışırken xcopy /y "$(OutDir)Proj1.dll" "Anypath\anyfolder\"çıkış kodu hatası 4 alıyordum.

Ne oldu, bu komut $ (OutDir) (benim durumumda inşa klasörü) kendisi projenin csproj dosyasının bulunduğu dizinde değil yürütülüyordu (normalde beklendiği gibi). Bu yüzden almaya devam ettimFile not found hata (çıkış kodu 4'e karşılık gelir).

cdPost Build olaylarında yazılana kadar , bunun hangi dizinde yürütüldüğünü yazdırmak için bunu anlayamadım .

Özetlemek gerekirse, copy/ xcopydosyalarından istiyorsak $(OutDir), ya "$(TargetDir)"(çıkış dizini için tam yol olan) kullanın ya da herhangi bir yol belirtmemiz gerekmez.


0

Paylaşılan Klasörlere Sahip VMWare İş İstasyonundan kaynaklanabilir

Ben her zaman sorun var destinatinon klasör xcopy de bir VM'de Paylaşılan Klasör olarak eşlenir .

Vm'de çalışan ve paylaşılan klasörün içeriğini silen bir komut dosyası ile çözdüm.


0

Rhughes cevabını genişletmek için,

Robocopy güzel çalışıyor, sadece alt dizinleri /eeklemek ve boş dizinleri kopyalamak veya /sboş dizinleri hariç tutmak için kullanabileceğiniz alt dizinleri eklemeniz gerekiyorsa .

Ayrıca robokopi, yeni dosyaların kopyalanması gibi birkaç şeyi geri bildirir; bu, VS'nin şikayet etmesine neden olur, çünkü 0'ın üstündeki herhangi bir şey bir başarısızlıktır ve yeni dosyalar bulunursa robokopi 1 döndürür. Robokopinin önce Kaynak / Hedef'i karşılaştırdığını ve sadece güncellenen / yeni dosyaları kopyaladığını belirtmek gerekir.

Bu kullanımı aşmak için:

(robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)") ^& IF %ERRORLEVEL% LEQ 4 exit /B 0

0

Projeniz bir yapı sunucusunda oluşturulamadığı, ancak bir geliştirici makinesinde iyi "el ile" oluşturduğu xcopyiçin buradaysanız ve yalnızca hata ayıklama ve bir geliştirme makinesinde bir üretim ortamını taklit etmek için yapıyorsanız , bakmak isteyebilirsiniz. bu çözümde:

https://stackoverflow.com/a/1732478/2279059

Yapım sunucusundaki post-build olaylarını kullanarak

msbuild foo.sln /p:PostBuildEvent=

Yapı sunucusunda da çalışması gereken diğer yayın oluşturma olaylarınız varsa bu yeterli değildir ve genel bir çözüm değildir. Ancak, bu sorunun pek çok farklı nedeni olduğundan, genel bir çözüm olamaz. Bu sorunun (ve kopyalarının) birçok cevabından biri muhtemelen yardımcı olacaktır, ancak hata işlemeyi (örneğin xcopy /C) sadece bir şekilde atlatan yaklaşımlara dikkat edin . Bunlar sizin için, özellikle de yapı sunucusu senaryosunda çalışabilir, ancak bu daha güvenilir, bence kullanılabilir.

Ayrıca, Visual Studio'nun yeni sürümlerinde sorunun artık mevcut olmadığı da önerildi, bu nedenle eski bir sürüm kullanıyorsanız derleme araçlarınızı güncellemeyi düşünün.


0

Hata kodu 4 çok şey ifade edebilir, bu yüzden sizin için çalışan bir çözüm bulana kadar diğer cevapları da okumanızı öneririm VE NEDEN işe yaradığını anlarsınız (bazı çözümler yalnızca sorun gidermeyi devre dışı bırakabilir, ancak sorunu maskeleyebilir ancak çöz onu).

Bu paralel bina ile ilgili bir dosya kilitleme sorunu olabilir. Çözüm, paralel bina kullanmamaktır. Bu varsayılan davranıştır, ancak -mseçeneği kullanıyorsanız, projeler paralel olarak oluşturulacaktır. Aşağıdaki varyasyonlar paralel olarak projeler oluşturmamalıdır, bu nedenle dosya kilitleme sorunuyla karşılaşmazsınız.

msbuild -m:1
msbuild -maxcpucount:1
msbuild

Burada söylenenlerin aksine, bunun MSBuild'in "Visual" 2019 için Build Tools'dan "en son" sürümünde bile gerçekleştiğini unutmayın.

En iyi çözüm, dosyaları derleme sonrası adımda kopyalamanız gerekmediğinden emin olmaktır. Bazı durumlarda, bir yapı sunucusunda MSBuild ile oluştururken yapım sonrası adımlarını devre dışı bırakabilirsiniz: https://stackoverflow.com/a/55899347/2279059

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.