Flash CS4 menolak untuk melepaskannya

2742

Saya memiliki proyek Flash, dan memiliki banyak file sumber. Saya memiliki kelas yang cukup banyak digunakan, sebut saja Jenine. Saya baru-baru ini (dan, mungkin, tanpa perasaan) memindahkan Jenine dari satu namespace ke yang lain. Saya pikir kami sudah siap - saya pikir sudah waktunya. Jenine baru lebih baik dalam segala hal - dia telah kehilangan beberapa kode mengasapi, dia telah memisahkan dirinya dari beberapa hubungan kelas sisa, dan dia akhirnya pulang ke namespace yang dia selalu diam-diam dikenal di dalam hatinya adalah dia benar-benar dia benar-benar milik. Dia termasuk di antara kaumnya sendiri.

Sayangnya, Flash tidak memilikinya. Mungkin itu telah membentuk keterikatan. Mungkin itu tidak ingin Jenine dipisahkan. Bagaimanapun, itu melekat pada versi Jenine yang lama dan sempurna dalam ingatannya. Itu menolak untuk pindah. Itu mengabaikan panggilan (fungsinya). Itu mencoba melupakan antarmuka publiknya yang baru. Sebaliknya, setiap instance Jenine yang dibuatnya selalu merupakan salinan versi lama, hingga kelasnya:

var jenineInstance:Jenine = new Jenine();
trace( getQualifiedClassName(jenineInstance));
// Should print: com.newnamespace.subspace::Jenine
// Prints: com.oldnamespace.subspace::Jenine
// Ah, young love!

Kami berkelahi. Saya tidak bangga dengan beberapa hal yang saya katakan atau lakukan. Pada akhirnya, dalam kemarahan yang menjulang tinggi, aku menghapus semua referensi Jenine sepenuhnya. Dia benar-benar dihapus dari sistem. Kursor saya jatuh pada opsi menu "Empty Trash" seperti tutup peti yang dingin.

Saya tidak berpikir Flash pernah pulih. Sampai hari ini masih melekat pada ingatan Jenine. Definisinya yang lama dan tidak sempurna masih mengambang di proyek saya seperti hantu yang ditinggalkan. Setiap kali saya memaksa Flash untuk mengkompilasi, itu masih dengan penuh kasih memasukkan dia ke dalam film saya, meringkuk definisinya di antara yang lain, kelas hidup, seperti kuil kecil. Aku ingin tahu apakah mereka bisa melihatnya.

Flash dan saya tidak benar-benar berbicara lagi. Saya menulis kode saya, mengkompilasinya. Ada seorang gadis baru di kota bernama Summer yang terlihat hampir identik dengan Jenine, seolah-olah seseorang baru saja menyalin kode sumbernya grosir ke kelas baru, tetapi Flash belum menunjukkan minat. Sebagian besar hari itu hanya melamun dan menulis puisi buruk di komentar saya ketika itu berpikir saya tidak melihat.

Saya harap tidak ada orang lain yang memiliki pengalaman serupa, bahwa ini hanya riak tunggal, menyakitkan di laguna gelap yang mengerikan yang merupakan basis kode Flash. Adakah yang tahu cara menghapus cache apa pun yang digunakan kompiler?

Ender
sumber

Jawaban:

701

Flash masih memiliki file ASO, yang merupakan kode byte yang dikompilasi untuk kelas Anda. Di Windows, Anda dapat melihat file ASO di sini:

C:\Documents and Settings\username\Local Settings\Application Data\Adobe\Flash CS4\en\Configuration\Classes\aso

Di Mac, struktur direktori serupa di /Users/username/Library/Application Support/


Anda dapat menghapus file-file itu dengan tangan, atau di Flash Anda dapat memilih Control->Delete ASO filesuntuk menghapusnya.

wpjmurray
sumber
34
Disalin dari bawah: Ini dan yang lainnya, jawaban yang sangat mirip persis apa yang saya cari, tetapi sayangnya sepertinya tidak menyelesaikan masalah. Saya akan menulis yang satu ini hingga Adobe bug fun tiem. Saya akan menandainya sudah terpecahkan.
Ender
292
PS: Saya sudah mengklik item menu berulang-ulang. Saya telah terjun jauh ke dalam struktur file dalam upaya untuk akhirnya menghapus file yang berisi gema terakhir Jenine. Mereka tidak ada di sana. Ketika saya bertanya tentang mereka, Flash hanya menggumamkan sesuatu yang tidak jelas dan menatap ke luar angkasa. Saya pikir saya bisa mulai mendengar sesuatu dari ketukan tombol mouse saya. Jenine tertawa.
Ender
23
@Ender, apakah Anda mengalami masalah yang sama jika Anda baru saja mengkompilasi kode pada kotak baru. Seperti checkout kode baru ke komputer baru? Ini akan memberi tahu Anda apakah ada masalah dengan kode atau hal-hal yang melekat pada sistem file Anda *.
Jesse Webb
197

Coba hapus file ASO Anda.

File ASO di-cache versi kompilasi dari file kelas Anda. Meskipun IDE jauh lebih baik dalam melepaskan cache lama ketika perubahan dibuat, kadang-kadang Anda harus menghapusnya secara manual. Untuk menghapus file ASO: Kontrol> Hapus File ASO.

Ini juga merupakan penyebab dari bug "Saya-tidak-melihat-perubahan-saya-jadi-biarkan-saya-tambahkan-jejak-sekarang-semuanya-bekerja" yang diperkenalkan di CS3.

Magocto
sumber
165

Bagaimana jika Anda mengompilasinya menggunakan komputer lain? Yang baru diinstal akan menyenangkan. Saya harap mesin Anda tidak cemburu.

Rodrigo Strauss
sumber
125

Saya telah menemukan satu perilaku terkait yang mungkin membantu (sepertinya masalah spesifik Anda berjalan lebih dalam):

Flash memeriksa apakah file sumber perlu dikompilasi ulang dengan melihat cap waktu. Jika versi yang dikompilasi lebih lama dari file sumber, itu akan dikompilasi ulang. Tetapi tidak memeriksa apakah versi yang dikompilasi dihasilkan dari file sumber yang sama atau tidak.

Khususnya, jika Anda memiliki file skrip tindakan Anda di bawah kontrol versi, dan Anda Kembalikan perubahan, file yang dikembalikan biasanya memiliki stempel waktu yang lebih lama, dan Flash akan mengabaikannya.

Laurie Cheers
sumber
12
Benar, saya bekerja pada beberapa proyek dengan pengembang dari Afrika Selatan dan London. Ketika kita menyerahkan file flash bolak-balik, kita harus menyimpannya secara lokal, karena kompilasi akan menyebabkan kesalahan gila berdasarkan timestamp file. Pada dasarnya, mencoba mengkompilasi flash yang telah disimpan di masa depan adalah masalahnya. Kami menemukan jawabannya dengan mengubah tanggal kami di OS kami. Coba periksa stempel waktu Anda.
Dominic Tancredi
103

Juga, untuk menggunakan kelas namespace baru Anda, Anda juga dapat melakukannya

var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()
Arpit
sumber
96

Apakah Anda memiliki beberapa file swf? Jika kelas Anda diimpor di salah satu swf, swf lain juga akan menggunakan versi kelas yang sama. Satu impor lama dengan * dalam satu swf akan melakukannya. Kompilasi ulang semuanya dan lihat apakah itu berhasil.

Dave
sumber
10
Ya saya bertaruh Jenine dikompilasi ke dalam bagian lain dari kode Anda, baik swf atau swc yang Anda gunakan.
Arpit
11

Gunakan grepanalog untuk menemukan string oldnamespacedan Jeninedi dalam file di seluruh folder proyek Anda. Maka Anda akan tahu langkah apa yang harus dilakukan selanjutnya.

Ark-kun
sumber
4
Dugaan saya sendiri mengapa Anda downvoted adalah bahwa Anda telah memberikan jawaban yang cukup jelas dan sangat tersirat bahwa itu akan menyelesaikan masalah. Jawaban Anda tidak selalu buruk, tetapi ungkapan Anda dapat ditafsirkan sebagai terlalu percaya diri atau angkuh yang tidak adil, yang kadang-kadang mengganggu orang.
Erhannis
5
Hmm. Mungkin kau benar. Di sisi lain, itu membuat frustrasi ketika pertanyaan tidak memberikan jawaban atas pertanyaan yang jelas seperti pertanyaan saya. Sesuatu seperti "Saya telah mencari string Jenine di semua file, tetapi tidak dapat menemukan kecocokan". Saya tertarik. Saya ingin menyelesaikan misteri ini. Tetapi penulis membuat saya menggantung.
Ark-kun
3
Seperti yang saya katakan, jawaban Anda tidak selalu buruk; mungkin saja ungkapan Anda itu mengganggu seseorang. Jujur, itu reaksi pertamaku. Saya biasanya mencoba mengatakan sesuatu dengan cara " semoga ini akan membantu", mengingat bahwa seringkali penyebab sebenarnya bukanlah apa yang Anda pikirkan. Sekali lagi, saya setuju bahwa jawaban Anda adalah sesuatu yang harus dicoba, dan oleh karena itu pantas dipertimbangkan sebagai jawaban yang dikirimkan, tetapi ungkapan terkadang memengaruhi orang lebih daripada yang seharusnya.
Erhannis