Sesekali ketika saya membangun solusi saya di sini (dengan 7 proyek di dalamnya) saya mendapatkan 'Command copy keluar dengan kesalahan kode 4' yang ditakuti, di Visual Studio 2010 Premium ed.
Ini karena acara pasca-pembangunan tidak dapat dilalui.
Inilah yang memecahkan masalah, untuk sementara
- Kadang-kadang: Restart Visual Studio dan saya dapat membangun solusinya
- Terkadang: Restart Visual Studio dan manajer file pilihan saya (Q-Dir 4.37) menyelesaikannya.
Seperti apa bentuk post-build:
xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y
Ketika Anda mendapatkan salinan perintah keluar dengan kesalahan kode [masukkan nilai], biasanya karena hal berikut:
- izin baca / tulis
- file yang hilang
- direktori yang salah
Namun - jelas pada saat saya membangun solusi, tidak ada masalah.
FYI, saya menghapus ReSharper 5.1.1 dua minggu lalu dan Visual Studio telah memberi saya beberapa kesalahan sejak saat itu (di antara mereka tidak dapat melakukan debug). Saya menginstal ulang Visual Studio dan itu bekerja lebih baik sejak itu, tetapi masih mendapatkan masalah ini. Mungkinkah itu ada hubungannya dengan beberapa barang ReSharper yang berada di suatu tempat?
Apakah Anda memiliki masalah yang sama dan menyelesaikannya? Atau apakah Anda punya solusi yang memungkinkan untuk itu?
sumber
Meskipun
/C
mungkin mengabaikan kesalahan, itu mungkin bukan solusi yang sebenarnya karena mungkin ada file yang HARUS disalin agar bangunan berhasil.Masalah yang paling umum adalah kutipan yang hilang di sekitar tag perintah yang telah ditentukan (seperti
$TargetDir
). Ketika seseorang membuat berbagai cabang dan jalur dalam kode atau TFS, ada peluang yang sangat tinggi untuk ini terjadi.Terkadang jika file hanya dibaca, itu akan menyebabkan masalah juga. Tambahkan
/R
opsi untuk memperbolehkan file hanya baca untuk disalin. Anda dapat menemukan daftar opsi yang tersedia di:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true
Masalah lain yang mungkin adalah bahwa folder yang mendasarinya tidak dapat diakses. Jika demikian, cobalah melakukan
"start xcopy"
alih-alih"xcopy"
. Ini akan membuka jendela perintah lain tetapi dengan admin priveleges.sumber
start
dan/R
, untuk berjaga-jaga ... tidak yakin yang mana yang berhasil, tetapi berhasil! Terima kasih!Saya melewati kesalahan yang sama, tetapi itu bukan karena file terkunci, tetapi file tersebut hilang.
Alasan mengapa VS mencoba untuk menyalin file yang tidak ada, adalah karena perintah event Post-build.
Setelah saya jelaskan, masalah diselesaikan.
MEMPERBARUI:
Seperti yang dikomentari @rhughes:
dan dia benar sekali.
sumber
Saya juga menghadapi masalah ini. Periksa hasilnya di jendela kesalahan.
Dalam kasus saya, sebuah tailing
\
sedang menabrak xcopy (seperti yang saya gunakan$(TargetDir)
). Dalam kasus saya$(SolutionDir)..\bin
. Jika Anda menggunakan output lain, ini perlu disesuaikan.Perhatikan juga bahwa
start xcopy
tidak memperbaikinya, jika kesalahan hilang setelah dikompilasi. Mungkin saja telah ditekan oleh baris perintah dan tidak ada file yang benar-benar telah disalin!Anda dapat secara manual menjalankan perintah xcopy Anda dalam shell perintah. Anda akan mendapatkan lebih banyak detail saat mengeksekusi mereka di sana, mengarahkan Anda ke arah yang benar.
sumber
Seandainya acara pembuatan post berisi perintah copy / xcopy untuk menyalin output build ke beberapa direktori (yang biasanya merupakan operasi post build yang paling umum) masalah dapat terjadi jika path direktori lengkap salah satu dari sumber atau tujuan tujuan memuat nama folder yang meliputi spasi. Hapus ruang untuk nama direktori dan coba.
sumber
Seperti disebutkan di banyak situs, ada berbagai alasan untuk ini. Bagi saya itu karena panjang Sumber dan Tujuan (Panjang jalur). Saya mencoba xcopy di command prompt dan saya tidak dapat mengetikkan sumber dan path lengkap (setelah beberapa karakter tidak akan memungkinkan Anda untuk mengetik). Saya kemudian mengurangi panjang jalur dan bisa berlari. Semoga ini membantu.
sumber
Jalankan VS dalam mode Administrator dan itu akan berfungsi dengan baik.
sumber
Saya mendapatkan kesalahan ini karena akun pengguna yang menjalankan TFS Build Service tidak memiliki izin untuk menulis ke folder tujuan.
Right-click on the folder-->Properties-->Security
.sumber
Ini dapat terjadi dalam banyak kasus:
sumber
Saya mendapat kesalahan ini karena file dibuka pada contoh lain.
ketika saya menutup file dan membangun kembali solusinya, itu berhasil disalin.
sumber
Saya menghadapi masalah yang sama dalam kasus XCOPY setelah build selesai. Dalam kasus saya, masalah ini terjadi karena izin BACA HANYA yang ditetapkan pada folder.
Saya menambahkan perintah attrib -R sebelum XCOPY dan itu memecahkan masalah.
Semoga ini bisa membantu seseorang!
sumber
Saya memiliki kesalahan yang sama dengan xcopy sehubungan dengan Mesin Uji. Saya menggunakan VisualStudio Professional 2013. Secara default Test -> Test Settings -> Keep Test Execution Engine Running tampaknya menjadi alasan kode kesalahan 4 saya dengan xcopy. Mematikannya memecahkan masalah. Mesin eksekusi tampaknya terus bertahan pada beberapa .dlls.
sumber
Saya memiliki masalah yang sama. 'Solusi Bersih' sederhana di VS mengatasi kesalahan, tapi itu solusi sementara.
sumber
Saya menemukan bahwa pengaturan parameter Salin Ke Keluaran Direktori ke Salin Tampaknya telah menyelesaikan masalah penguncian. Meskipun sekarang saya memiliki 2 salinan file dan perlu menghapus satu.
sumber
Saya memiliki masalah yang sama. Namun, tidak ada yang berhasil untuk saya. Saya memecahkan masalah dengan menambahkan
ke kode saya. Masalahnya adalah ketika saya sedang menyalin file, kadang-kadang file terakhir tidak dapat ditemukan, dan kelelawar mengembalikan nilai yang tidak nol.
Semoga ini bisa membantu seseorang!
sumber
Jika Anda menjalankan Windows 7 dan seterusnya, Anda dapat mencoba perintah 'robocopy' baru:
Informasi lebih lanjut tentang robocopy dapat ditemukan di sini .
sumber
Saya menghadapi masalah yang sama. Saya menghapus acara pasca-pembangunan dan mulai berfungsi. Beberapa kali ketika kita menambahkan beberapa komponen SQL mungkin juga menambahkan perintah post build.
sumber
Saya mendapatkan sesuatu yang serupa menggunakan xcopy dengan opsi / exclude. Dalam kasus saya, saya menemukan bahwa mengedit acara post-build (sesuatu yang tidak berbahaya seperti baris baru setelah perintah) dan menyimpan proyek menyebabkan kesalahan terjadi. Menyimpan kembali file yang ditentukan dalam opsi / kecualikan menyebabkannya berfungsi kembali.
sumber
Saat saya menulis perpustakaan DLL saya menggunakan perintah xcopy untuk menyalin perpustakaan tempat program dapat menemukan dan memuatnya. Setelah beberapa kali membuka dan menutup program, masih ada proses terbuka di taskmanager yang tidak saya kenali.
Cari proses apa pun dari mana file tersebut dapat digunakan dan tutup.
sumber
Apa yang memperbaikinya bagi saya : gali solusi spesifik untuk proyek yang Anda inginkan yaitu BUKAN file solusi keseluruhan untuk semua proyek.
Cobalah - Saya mencoba semua yang lain yang disebutkan di sini tetapi tidak berhasil.
sumber
Saya tidak melihat apa-apa di sini untuk menyarankan bahwa ini adalah aplikasi web tetapi saya sendiri pernah mengalami masalah ini - saya punya dua perintah xcopy pada acara pasca-pembangunan dan hanya satu yang gagal. Sesuatu memiliki kunci pada file, dan itu bukan Visual Studio (ketika saya mencoba me-restart itu.)
Satu-satunya hal lain yang akan menggunakan dll yang saya buat adalah IIS. Dan lihatlah,
Sederhana telah
iisreset
melakukan trik untuk saya.sumber
Saya memiliki masalah yang sama. Itu disebabkan oleh memiliki bendera yang sama dua kali, misalnya:
jika $ (ConfigurationName) == Rilis (xcopy "$ (TargetDir) . " "$ (SolutionDir) Deployment \ $ (ProjectName) \" / e / d / i / y / e)
Perhatikan bahwa bendera "/ e" muncul dua kali. Menghapus duplikat menyelesaikan masalah.
sumber
Dalam kasus saya, saya
$(OutDir)
hanyalah..\..\Build\
beberapa jalur relatif. Dan, ketika saya mencoba xcopy sebagai berikutxcopy /y "$(OutDir)Proj1.dll" "Anypath\anyfolder\"
saya mendapatkan kode keluar error 4.Apa yang terjadi adalah, perintah ini dijalankan di $ (OutDir) (dalam folder build kasus saya) sendiri dan bukan direktori tempat file csproj proyek berada (seperti yang biasanya kita harapkan). Oleh karena itu, saya terus mendapatkan
File not found
kesalahan (sesuai dengan kode keluar 4).Saya tidak bisa mengetahuinya sampai saya menulis
cd
di acara Post Build, untuk mencetak direktori tempat ini dijalankan.Jadi, untuk meringkas, jika kita ingin
copy
/xcopy
file dari$(OutDir)
, gunakan"$(TargetDir)"
(yang merupakan path lengkap untuk direktori output) atau tidak perlu menentukan path sama sekali.sumber
Dapat disebabkan oleh VMWare Workstation dengan Shared Folders
Saya memiliki masalah selalu ketika folder destinatinon
xcopy
juga dipetakan sebagai Folder Bersama di VM.Saya menyelesaikannya dengan skrip yang berjalan di vm dan menghapus konten folder bersama.
sumber
Untuk memperluas jawaban rhughes,
Robocopy berfungsi dengan baik, hanya jika Anda perlu memasukkan sub direktori yang dapat Anda gunakan
/e
untuk memasukkan sub dan menyalin direktori kosong atau/s
untuk memasukkan sub tidak termasuk direktori kosong.Robocopy juga akan melaporkan kembali beberapa hal seperti jika file baru disalin, ini akan menyebabkan VS mengeluh karena apapun di atas 0 adalah kegagalan dan robocopy akan mengembalikan 1 jika file baru telah ditemukan. Layak disebutkan bahwa robocopy pertama-tama membandingkan Sumber / Dest dan hanya menyalin file yang diperbarui / baru.
Untuk menyiasatinya gunakan:
sumber
Jika Anda ada di sini karena proyek Anda gagal membangun di server build, tetapi membangun "manual" dengan baik di mesin dev, dan Anda melakukan
xcopy
hanya untuk debugging dan meniru lingkungan produksi pada mesin dev, maka Anda mungkin ingin melihat pada solusi ini:https://stackoverflow.com/a/1732478/2279059
Anda cukup mematikan acara post build di build server menggunakan
Ini tidak cukup baik jika Anda memiliki acara post build lainnya yang juga perlu dijalankan di build server, dan itu bukan solusi umum. Namun, karena ada begitu banyak penyebab masalah ini, tidak mungkin ada solusi umum. Salah satu dari banyak jawaban untuk pertanyaan ini (dan duplikatnya) mungkin akan membantu, tetapi berhati-hatilah dengan pendekatan yang hanya menghindari penanganan kesalahan (seperti
xcopy /C
). Itu mungkin bekerja untuk Anda, terutama juga dalam skenario build server, tapi saya pikir ini lebih dapat diandalkan, JIKA itu bisa digunakan.Juga disarankan bahwa dengan versi Visual Studio yang lebih baru, masalahnya tidak ada lagi, jadi jika Anda menggunakan versi lama, pertimbangkan untuk memperbarui alat pembuatan Anda.
sumber
Kode kesalahan 4 dapat berarti banyak hal, jadi saya sarankan membaca jawaban lain juga sampai Anda menemukan solusi yang cocok untuk Anda DAN Anda mengerti MENGAPA berfungsi (beberapa solusi hanya menonaktifkan penanganan kesalahan, yang mungkin hanya menutupi masalah tetapi tidak menyelesaikannya).
Ini bisa menjadi masalah penguncian file yang terkait dengan bangunan paralel. Solusi adalah tidak menggunakan bangunan paralel. Ini adalah perilaku default, tetapi jika Anda menggunakan
-m
opsi, maka proyek akan dibangun secara paralel. Variasi berikut seharusnya tidak membangun proyek secara paralel, sehingga Anda tidak akan mengalami masalah penguncian file.Perhatikan bahwa, bertentangan dengan apa yang telah dikatakan di sini, ini bahkan terjadi dengan versi "terbaru" dari MSBuild (dari Build Tools for Visual Studio 2019).
Solusi terbaik mungkin untuk memastikan Anda tidak perlu menyalin file dalam langkah post-build. Dalam beberapa situasi, Anda juga dapat menonaktifkan langkah-langkah pasca-membangun ketika membangun dengan MSBuild di server build: https://stackoverflow.com/a/55899347/2279059
sumber