Salinan perintah yang keluar dengan kode 4 saat membangun - Visual Studio restart menyelesaikannya

151

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?

Martin S Ek
sumber

Jawaban:

74

Saya selalu menemukan ini sebagai masalah penguncian file. Kode 4 adalah Tidak Dapat Mengakses File. Salah satu solusi parsial yang saya temukan adalah menggunakan opsi / C untuk xcopy (yang berlanjut pada kesalahan). Tidak benar-benar solusi tetapi sebagian besar telah menghentikan build saya dari gagal.

Solusi lain yang hanya berfungsi pada 32 bit adalah dengan menggunakan alat pembuka kunci untuk melepaskan pegangan windows pada file sebelum menyalin.

Sunting: Saya baru sadar bahwa ini juga bekerja di bawah 64 bit.

Praha Sangha
sumber
3
Saya menambahkan opsi / C ke perintah xcopy di atas dan build berhasil. Terima kasih! Unlocker terkadang sangat berharga.
Martin S Ek
2
Saya mengalami masalah ini karena salah satu file hanya baca. Setelah saya mengubahnya, itu berhasil.
Bob Horn
Saya juga bisa membuktikan bahwa masalah ini diselesaikan dengan menghapus izin hanya baca untuk menyinggung file. Kami memiliki folder nampan eksternal yang menyebabkan masalah dijelaskan. Setelah saya menghapus atribut read-only, kesalahan menghilang ketika mencoba membangun solusinya.
eniacAvenger
3
Unlocker yang Anda tunjuk ini terdeteksi sebagai virus oleh hampir semua hal. (google jelajahi hal-hal aman, eset, virustotal ...). tampaknya menjadi diskusi tentang itu di sini cnet.com/forums/discussions/unlocker-contains-malware-558941
v.oddou
Ingat berapa umur jawaban ini. Virus yang Anda duga sebenarnya adalah barang ad ware yang sekarang tampaknya dibundel ke dalam installer, bukan perangkat lunak unlocker itu sendiri.
Preet Sangha
196

Meskipun /Cmungkin 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 /Ropsi 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.

Vemul
sumber
53
'mulai' memperbaikinya untuk saya ... dari forum lain ini tampaknya menjadi masalah izin yang 'mulai' diselesaikan, meskipun tujuannya memiliki Kontrol Penuh untuk 'Semua Orang' di kotak saya. Anda juga dapat menjalankan 'start / MIN xcopy ...' untuk meminimalkan flicker window
mdisibio
2
Saya mengubah c: \ windows \ system32 \ xcopy.exe $ (TargetPath) <tujuan path> ke c: \ windows \ system32 \ xcopy.exe "$ (TargetPath)" <path tujuan> dan tidak memiliki masalah dalam 50+ terakhir membangun.
Pennyrave
1
Saya telah menggunakan "$ (OutDir) $ (TargetFileName)", mengubahnya menjadi "$ (TargetPath)" memecahkan masalah. Seperti halnya menggunakan 'mulai'!
Berselancar
Masalah saya tampaknya berasal dari penggunaan karakter en-dash di salah satu nama folder induk alih-alih tanda hubung. Saya membuat kesalahan dengan menyalin / menempelkan nama folder cabang dari kata, yang kira-kira seperti "1234 - ABCD". Berganti nama menjadi "1234 - ABCD" dan xcopy berfungsi dengan baik sekarang.
Sudeep
menambahkan startdan /R, untuk berjaga-jaga ... tidak yakin yang mana yang berhasil, tetapi berhasil! Terima kasih!
s
19

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:

Masalah sebenarnya adalah bagaimana membuat perintah di sini berfungsi, daripada menghapusnya.

dan dia benar sekali.

masukkan deskripsi gambar di sini

Berlaku dari
sumber
1
Jika Anda menyalin file selama post-build, kemungkinan alasannya adalah karena Anda telah memasukkan perintah di sini. Masalah sebenarnya adalah bagaimana membuat perintah di sini berfungsi, daripada menghapusnya.
rhughes
9

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

ElGauchooo
sumber
Hal yang sama terjadi pada saya dengan $ (OutDir). Tampaknya semua makro jalur memiliki "\" di akhir dan macet xcopy
Leo Kolezhuk
6

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.

akka16
sumber
5

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.

Ganesh Patil
sumber
4

Jalankan VS dalam mode Administrator dan itu akan berfungsi dengan baik.

Satyen
sumber
1
Saya menjalankan VS sebagai Administrator tetapi ini tidak berhasil untuk saya.
Arafat
Beberapa pengguna mungkin tidak dapat berjalan dalam mode Administrator.
MrSpudtastic
3

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.

Tangodancer
sumber
Angkat topi ke "Tangodancer" dan atau "Abdul Rahman". Klik kanan pada folder -> Properties -> Security memecahkan masalah bagi saya pada sistem XP SP3 yang berdiri sendiri Terima kasih
3

Ini dapat terjadi dalam banyak kasus:

  1. Ketika jalur string lengkap lebih panjang dari 254 karakter.
  2. Ketika nama file yang akan disalin salah.
  3. Ketika jalur target salah.
  4. Ketika atribut readonly diatur pada file yang disalin atau folder target.
Srihari Chinna
sumber
2

Saya mendapat kesalahan ini karena file dibuka pada contoh lain.

ketika saya menutup file dan membangun kembali solusinya, itu berhasil disalin.

Aditya Reddy
sumber
2

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!

Asad
sumber
2

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.

Fabian
sumber
1

Saya memiliki masalah yang sama. 'Solusi Bersih' sederhana di VS mengatasi kesalahan, tapi itu solusi sementara.

Doigen
sumber
Saya mendapatkan masalah ini dan "Solusi Bersih" tidak membantu saya. Apakah "Solusi Bersih" bekerja untuk Anda setiap saat?
qxotk
1

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.

pengguna432404
sumber
1

Saya memiliki masalah yang sama. Namun, tidak ada yang berhasil untuk saya. Saya memecahkan masalah dengan menambahkan

exit 0

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!

XMight
sumber
1

Jika Anda menjalankan Windows 7 dan seterusnya, Anda dapat mencoba perintah 'robocopy' baru:

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

Informasi lebih lanjut tentang robocopy dapat ditemukan di sini .

rhughes
sumber
1

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.

Manusia laba-laba
sumber
1

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.

Neil
sumber
1

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.

Cano
sumber
1

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.

arush436
sumber
1

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 iisresetmelakukan trik untuk saya.

BinaryTony
sumber
1

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.

sapbucket
sumber
1

Dalam kasus saya, saya $(OutDir)hanyalah ..\..\Build\beberapa jalur relatif. Dan, ketika saya mencoba xcopy sebagai berikut xcopy /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 foundkesalahan (sesuai dengan kode keluar 4).

Saya tidak bisa mengetahuinya sampai saya menulis cddi acara Post Build, untuk mencetak direktori tempat ini dijalankan.

Jadi, untuk meringkas, jika kita ingin copy/ xcopyfile dari $(OutDir), gunakan "$(TargetDir)"(yang merupakan path lengkap untuk direktori output) atau tidak perlu menentukan path sama sekali.

Hussain Mir
sumber
0

Dapat disebabkan oleh VMWare Workstation dengan Shared Folders

Saya memiliki masalah selalu ketika folder destinatinon xcopyjuga dipetakan sebagai Folder Bersama di VM.

Saya menyelesaikannya dengan skrip yang berjalan di vm dan menghapus konten folder bersama.

rawa-goyang
sumber
0

Untuk memperluas jawaban rhughes,

Robocopy berfungsi dengan baik, hanya jika Anda perlu memasukkan sub direktori yang dapat Anda gunakan /euntuk memasukkan sub dan menyalin direktori kosong atau /suntuk 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:

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

Jika Anda ada di sini karena proyek Anda gagal membangun di server build, tetapi membangun "manual" dengan baik di mesin dev, dan Anda melakukan xcopyhanya 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

msbuild foo.sln /p:PostBuildEvent=

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.

Musim Dingin Florian
sumber
0

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 -mopsi, maka proyek akan dibangun secara paralel. Variasi berikut seharusnya tidak membangun proyek secara paralel, sehingga Anda tidak akan mengalami masalah penguncian file.

msbuild -m:1
msbuild -maxcpucount:1
msbuild

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

Musim Dingin Florian
sumber