Apa yang salah saat Visual Studio memberi tahu saya "xcopy keluar dengan kode 4"

126

Saya tidak terlalu paham dengan acara pasca-pembangunan, jadi saya agak bingung tentang apa yang salah dengan program saya. Saat menyusun di visual studio 2010, saya mendapatkan yang berikut:

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.    

Program ini tampaknya berjalan dengan baik, meskipun ada kesalahan ini, tetapi saya tidak ingin mengabaikan masalah ini dan berharap tidak ada hal buruk yang terjadi. Anehnya, baris ini dimulai hanya sebagai satu perintah (xcopy pertama) tetapi ketika saya terus mengkompilasi proyek (memperbaiki masalah lain, sebagian besar referensi), pesan kesalahan meluas semakin besar. Tahu apa yang sedang terjadi?

Sunting: Berikut adalah acara postbuild yang tampaknya gagal -

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
Raven Dreamer
sumber
2
Selain jawaban di bawah, pastikan juga untuk membuka VS dengan Administrator privileges. Menyalin ke lokasi tertentu membutuhkan hak admin.
Nikhil Agrawal

Jawaban:

167

Kode keluar Xcopy 4 berarti " Terjadi kesalahan inisialisasi. Memori atau ruang disk tidak cukup, atau Anda memasukkan nama drive yang tidak valid atau sintaks yang tidak valid pada baris perintah. "

Sepertinya Visual Studio memberikan argumen yang tidak valid ke xcopy. Periksa perintah post-build event Anda melalui Project > Right Click > Properties > Build Events > Post Build Event.

Perhatikan bahwa jika $(ProjectDir)istilah makro atau yang serupa memiliki spasi di jalur yang dihasilkan saat diperluas, istilah makro tersebut perlu diapit tanda kutip ganda. Sebagai contoh:

xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1
Mark Cidade
sumber
Seperti yang saya katakan, saya tidak tahu banyak tentang skrip acara pasca-pembangunan (dan saya tidak menulis ini); dimana saya menemukan ini?
Raven Dreamer
1
Pergi ke Properti proyek> Build Events
Mark Cidade
2
Coba gabungkan setiap perintah dengan tanda kutip ganda ( "command args").
Berikan Thomas
@ Mark Cidade - Sepertinya saya tidak memiliki "Acara Bangun" di mana pun. Properti Umum yang Terdaftar: "Proyek Startup; Dependensi Proyek; File Sumber Debug; Pengaturan Analisis Kode". Properti Konfigurasi Terdaftar: "konfigurasi".
Raven Dreamer
4
@RavenDreamer: Jika $(ProjectDir)(dan / atau serupa) memiliki spasi di jalur yang diperluas, maka itu harus diapit tanda kutip. Misalnya:xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1
Grant Thomas
34

Alihkan tab arloji ke "ouput" dan cari perintah xcopy. Terkadang di sini Anda menemukan beberapa pesan lagi (keluaran xcopy sebenarnya) yang dapat membantu Anda untuk memecahkan masalah. Jika Anda tidak melihat tab output, gunakan menu View-Output untuk menampilkannya.

Felice Pollano
sumber
30

Saya selain jawaban yang diterima, kesalahan juga dapat terjadi ketika folder tujuan hanya-baca (Umum saat menggunakan TFS)

Pieter
sumber
2
Dan sesuatu yang dapat Anda lihat jika Anda beralih ke jendela keluaran seperti @FelicePollano yang disebutkan di bawah ini.
Jedidja
20

Jika file sumber tidak ditemukan xcopy mengembalikan kode kesalahan 4 juga.

Der_Meister
sumber
3
ini kasus saya. saya menggunakan $(TargetDir)yang diakhiri dengan Release\ . Menggunakan $(ProjectDir)\bin\Releasetanpa trailing \\ berhasil untuk saya
Multinerd
12

Saya menerima pesan kesalahan ' keluar dengan kode 4 ' saat perintah xcopy mencoba menimpa file hanya-baca. Saya berhasil menyelesaikan masalah ini dengan menambahkan / R ke perintah xcopy. The / R menunjukkan file read only harus ditimpa

perintah lama:

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

perintah baru

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

Seperti jawaban lain menjelaskan, kode keluar 4 mungkin memiliki banyak penyebab.

Saya melihat sebuah kasus, di mana nama jalur yang dihasilkan melebihi panjang maksimum yang diizinkan (seperti di sini ).

Saya telah mengganti xcopy dengan robocopy untuk acara pasca pembangunan yang terpengaruh; robocopy tampaknya menangani jalur yang sedikit berbeda dan dapat menyelesaikan tugas penyalinan yang tidak dapat ditangani xcopy.

CodeFox
sumber
5

Artinya :

Terjadi kesalahan inisialisasi. Memori atau ruang disk tidak cukup, atau Anda memasukkan nama drive yang tidak valid atau sintaksis yang tidak valid pada baris perintah.

Jadi pada dasarnya bisa saja apa saja haha ​​... coba jalankan perintah satu per satu dari command prompt untuk mencari tahu bagian mana dari perintah yang membuat Anda kesulitan.

BrandonZeider
sumber
3

Saya mendapatkan ini bersama dengan pesannya

Spesifikasi drive tidak valid

saat menyalin ke jaringan berbagi tanpa menentukan nama drive, mis

xcopy . \\localhost

dimana

xcopy . \\localhost\share

diharapkan

Thomas Weller
sumber
2

Saya mengalami masalah ini, jadi saya menjalankan perintah xcopy dari baris perintah dan dikatakan:

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

Itu sebenarnya Visual Studio yang memegang sesuatu. Saya baru saja memulai ulang Visual Studio dan berhasil.

NielW
sumber
1

Dalam kasus saya, masalahnya adalah karena urutan build yang salah. Satu proyek memiliki perintah xcopy pada acara pasca-pembangunan untuk menyalin file dari folder bin ke folder lain. Tetapi karena dependensi yang salah, file baru dibuat di folder bin sementara xcopy sedang berlangsung.

Di VS, klik kanan pada proyek tempat Anda memiliki acara pasca-pembangunan. Buka Build Dependencies> Project Dependencies dan pastikan sudah benar. Verifikasi urutan pembangunan proyek (tab di sebelah dependensi) juga.

sree
sumber
1

Kesalahan ini terjadi jika ada ruang kosong tempat repo Anda disalin. Misalnya proyek saya disalin di lokasi di bawah ini c://projects/My rest project maka Anda dapat melihat ruang putih di sana, jika Anda mengubah jalur repo Anda ke bawah, seharusnya berfungsi c://projects/myrestproject

Tushar Mali
sumber
0

Saya memiliki masalah yang sama. Anda juga dapat memeriksa ke arah mana garis miring mengarah. Bagi saya, ini berhasil menggunakan garis miring terbalik, bukan garis miring ke depan. Contoh

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

Dari pada:

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

Saya memiliki perintah post build yang berfungsi dengan baik sebelum saya melakukan pembaruan pada VS 2017. Ternyata alat SDK diperbarui dan berada di bawah jalur baru sehingga tidak dapat menemukan alat yang saya gunakan untuk menandatangani rakitan saya.

Ini berubah dari ini ....

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"

Untuk ini...

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

Perubahan yang sangat halus tetapi merusak, jadi periksa jalur Anda setelah pembaruan jika Anda melihat kesalahan ini.

Fütemire
sumber
0

Hal lain yang harus diperhatikan adalah garis miring terbalik ganda, karena xcopytidak mentolerirnya dalam parameter jalur input (tetapi itu tidak mentolerirnya di jalur keluaran ...).

masukkan deskripsi gambar di sini

Elaskanator
sumber
0

Jika ada solusi lain dalam mode debug maka pertama-tama hentikan semuanya dan setelah itu mulai ulang studio visual. Itu berhasil untuk saya.

Savan Gadhiya
sumber
0

Ini juga bisa terjadi jika folder target digunakan oleh beberapa proses lain . Tutup semua program yang mungkin menggunakan folder target dan coba.

Anda dapat menggunakan pemantau sumber daya (alat windows) untuk memeriksa proses yang menggunakan folder target Anda.

Ini berhasil untuk saya !.

Pravin kumar
sumber