Visual Studio bana "xcopy exited with code 4" dediğinde ne yanlış gidiyor?


126

Yapım sonrası olaylara pek aşina değilim, bu yüzden programımda neyin yanlış gittiği konusunda biraz kafam karıştı. Visual Studio 2010'da derlerken şunları elde ederim:

The command "xcopy C:\Users\Me\Path\Foo.bar\Library\dsoframer.ocx C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\Foo.bar\ApplicationFiles C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\url\ C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
rmdir /S /Q C:\Users\Me\Path\Foo.bar\bin\Debug\.gwt-tmp" exited with code 4.    

Bu hataya rağmen program iyi çalışıyor gibi görünüyor , ancak bu sorunu görmezden gelmek ve kötü bir şey olmamasını ummak istemiyorum. Garip bir şekilde, bu satır yalnızca tek bir komut (ilk xcopy) olarak başladı, ancak projeyi derlemeye devam ettikçe (diğer sorunları gidermek, çoğunlukla referanslar) hata mesajı gittikçe genişledi. Neler olabileceği hakkında bir fikriniz var mı?

Düzenleme: İşte başarısız görünen postbuild olayları -

xcopy $(ProjectDir)Library\dsoframer.ocx $(TargetDir) /Y /E /D
xcopy $(ProjectDir)ApplicationFiles $(TargetDir) /Y /E /D
xcopy $(SolutionDir)com.myUrl.gwt\www $(TargetDir) /Y /E /D
rmdir /S /Q $(TargetDir).gwt-tmp

2
Aşağıdaki cevapların yanı sıra, VS'yi de açtığınızdan emin olun Administrator privileges. Belirli konumlara kopyalamak için yönetici hakları gerekir.
Nikhil Agrawal

Yanıtlar:


167

Xcopy çıkış kodu 4, " Başlatma hatası oluştu. Yeterli bellek veya disk alanı yok veya komut satırına geçersiz bir sürücü adı veya geçersiz sözdizimi girdiniz " anlamına gelir.

Görünüşe göre Visual Studio, xcopy için geçersiz bağımsız değişkenler sağlıyor. Oluşturma sonrası olay komutunuzu üzerinden kontrol edin Project > Right Click > Properties > Build Events > Post Build Event.

$(ProjectDir)Genişletildiğinde ortaya çıkan yollarda veya benzer makro terimlerinin boşlukları varsa, çift ​​tırnak içine alınmaları gerekeceğini unutmayın. Örneğin:

xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1

Dediğim gibi, derleme sonrası olay betikleri hakkında pek bir şey bilmiyorum (ve bunları ben yazmadım); bunu nerede bulabilirim?
Raven Dreamer

1
Projeye gidin Özellikler> Olayları Oluştur
Mark Cidade

2
Her komutu çift tırnak ( "command args") içine almayı deneyin .
Grant Thomas

@Mark Cidade - Görünüşe göre hiçbir yerde "Yapı Etkinlikleri" yok. Listelenen Ortak Özellikler: "Başlangıç ​​Projesi; Proje Bağımlılıkları; Kaynak Dosyalarında Hata Ayıklama; Kod Analizi Ayarları". Listelenen Yapılandırma Özellikleri: "yapılandırma".
Raven Dreamer

4
@RavenDreamer: $(ProjectDir)(ve / veya benzeri) genişletilmiş yolda boşluklar içeriyorsa , tırnak işaretleri içine alınması gerekir. Örneğin:xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1
Grant Thomas

34

İzleme sekmesini "çıktı" olarak değiştirin ve xcopy komutunu arayın. Bazen burada sorunu çözmenize yardımcı olabilecek biraz daha mesaj (gerçek xcopy çıktısı) bulabilirsiniz. Çıktı sekmesini görmüyorsanız, göstermek için Çıktıyı Görüntüle menüsünü kullanın.


30

Kabul edilen cevaba ek olarak, hata, hedef klasör salt okunur olduğunda da ortaya çıkabilir (TFS kullanırken yaygındır)


2
Ve aşağıda belirtildiği gibi çıktı penceresine geçerseniz görebileceğiniz bir şey @FelicePollano.
Jedidja

20

Kaynak dosya bulunamazsa xcopy , hata kodu 4'ü de döndürür .


3
bu benim davamdı. $(TargetDir)ile biten kullandım Release\ . $(ProjectDir)\bin\Release\\
Takip

12

Xcopy komutu salt okunur bir dosyanın üzerine yazmaya çalıştığında ' kod 4 ile çıkıldı ' hatasını aldım . Bu sorunu xcopy komutuna / R ekleyerek çözmeyi başardım . / R gösterir okumak sadece dosyaları üzerine yazılır olmalı

eski komut:

XCOPY /E /Y "$(ProjectDir)source file" "destination"

yeni komut

XCOPY /E /Y /R "$(ProjectDir)source file" "destination"

8

Diğer yanıtların da açıkladığı gibi, çıkış kodu 4'ün birçok nedeni olabilir.

Ortaya çıkan yol adlarının izin verilen maksimum uzunluğu aştığı bir durum fark ettim (tıpkı burada olduğu gibi ).

Etkilenen post build olayı için xcopy'i robocopy ile değiştirdim; robocopy, yolları biraz farklı işliyor gibi görünüyor ve xcopy'nin işleyemediği kopyalama görevini tamamlayabildi.


5

Anlamı :

Başlatma hatası oluştu. Yeterli bellek veya disk alanı yok veya komut satırına geçersiz bir sürücü adı veya geçersiz sözdizimi girdiniz.

Yani temelde herhangi bir şey olabilir haha ​​... hangi komutun hangi kısmının size sorun çıkardığını anlamak için komut isteminden teker teker komutu çalıştırmayı deneyin.


3

Bunu mesajla birlikte anladım

Geçersiz sürücü özelliği

sürücü adını belirtmeden bir ağ paylaşımına kopyalarken, örn.

xcopy . \\localhost

nerede

xcopy . \\localhost\share

bekleniyordu


2

Bu sorunla karşılaştım, bu yüzden komut satırından xcopy komutunu çalıştırdım ve şöyle dedi:

File creation error - The requested operation cannot be performed on a file with
 a user-mapped section open.

Aslında Visual Studio bir şeylere tutunuyordu. Visual Studio'yu yeniden başlattım ve işe yaradı.


1

Benim durumumda sorun yanlış yapım sırasından kaynaklanıyordu. Bir proje, dosyaları bin klasöründen başka bir klasöre kopyalamak için derleme sonrası olaylarda xcopy komutuna sahipti. Ancak yanlış bağımlılıklar nedeniyle xcopy işlemi devam ederken bin klasöründe yeni dosyalar oluşturuluyordu.

VS'de, derleme sonrası olayların olduğu projeye sağ tıklayın. Bağımlılıklar Oluştur> Proje Bağımlılıkları'na gidin ve doğru olduğundan emin olun. Proje oluşturma sırasını da doğrulayın (bağımlılıkların sonraki sekmesi).


1

Bu hata, deponuzun kopyalandığı yerde beyaz boşlukların bulunmasından kaynaklanır. Örneğin projem aşağıdaki konuma kopyalandı, c://projects/My rest project oradaki beyaz boşlukları görebilirsin, repo yolunu aşağıya değiştirirsen çalışmalı c://projects/myrestproject


0

Ben de aynı sorunu yaşadım. Eğik çizginin hangi yönü gösterdiğini de kontrol edebilirsiniz. Benim için eğik çizgi yerine ters eğik çizgi kullanmak işe yaradı. Misal

xcopy /s /y "C:\SFML\bin\*.dll" "$(OutDir)"

Onun yerine:

xcopy /s /y "C:/SFML/bin/*.dll" "$(OutDir)"

0

VS 2017'de bir güncelleme yapmadan önce gayet iyi çalışan bir post build komutum vardı. SDK araçlarının güncellendiği ve yeni bir yolun altında olduğu, bu yüzden montajlarımı imzalamak için kullandığım aracı bulamadığı ortaya çıktı.

Bu bundan değişti ...

call "%VS140COMNTOOLS%vsvars32"
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

Buna...

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

Çok ince ama önemli bir değişiklik, bu nedenle bir güncellemeden sonra bu hatayı görürseniz yollarınızı kontrol edin.


0

Dikkat edilmesi gereken başka bir şey de çift ters eğik çizgidir, çünkü xcopybunları giriş yolu parametresinde tolere etmez (ancak çıkış yolunda tolerans gösterir ...).

görüntü açıklamasını buraya girin


0

Hata ayıklama modunda başka bir çözüm varsa, önce hepsini durdurun ve ardından görsel stüdyoyu yeniden başlatın. Benim için çalıştı.


0

Bu , hedef klasör başka işlemler tarafından kullanılıyorsa da gelebilir . Hedef klasörü kullanabilecek tüm programları kapatın ve deneyin.

Hedef klasörünüzü kullanan işlemleri kontrol etmek için kaynak izleyiciyi (Windows aracı) kullanabilirsiniz.

Bu 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.