Flash CS4 відмовляється відпускати


2742

У мене є проект Flash, і він має багато вихідних файлів. У мене досить сильно використовуваний клас, називайте його Дженнін. Нещодавно я (і, можливо, позивно) переїхав Дженнін з одного простору імен в інший. Я думав, що ми готові - я вважав, що настав час. Нова Дженіна була кращою в усіх відношеннях - вона втратила деякий кодовий розквіт, вона відірвалася від кількох руйнівних класових відносин, і нарешті повернулася додому в простір імен, про який завжди таємно знала в своєму серці, та, яку вона справді належав до. Вона була серед свого роду.

На жаль, у Flash не було б нічого з цього. Можливо, це сформувало прихильність. Можливо, вона не хотіла, щоб Дженнін була розв'язана. Так чи інакше, вона вчепилася в стару, досконалу версію Дженін у своїй пам’яті. Він відмовився рухатись далі. Він ігнорував її (функціональні) дзвінки. Вона намагалася забути її нові, публічні інтерфейси. Натомість кожен екземпляр Джені, який він сконструював, завжди був копією старої версії, аж до її класового шляху:

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

Ми воювали. Я не пишаюся деякими речами, які я сказав чи зробив. Врешті-решт, у високій гніві я повністю видалив усі згадки про Дженін. Вона була цілком стерта з системи. Мій курсор потрапив на параметр меню "Порожній кошик", як на холодній кришці шкатулки.

Я не думаю, що Flash ніколи не одужав. І донині це досі чіпляється за пам’ять про Дженін. Її старі, недосконалі визначення все ще пливуть через мій проект, як занедбані привиди. Кожного разу, коли я змушую Флеш складати, він все ще з любов'ю вставляє її у свій фільм, вкладаючи її визначення серед інших, живих класів, як маленьку святиню. Цікаво, чи зможуть її побачити.

Спалах, і я насправді більше не розмовляю. Я пишу свій код, він його складає. У місті з'явилася нова дівчина на ім’я Літо, яка виглядає майже ідентично Дженіні, ніби хтось щойно скопіював її вихідний код оптом у новий клас, але Flash не виявив інтересу. Більшість днів він просто розмовляє і пише погані вірші у своїх коментарях, коли думає, що я не дивлюсь.

Я сподіваюся, що ніхто інший не мав подібного досвіду, що це просто особлива, болісна пульсація в жахливій темній лагуні, що є базою Flash-коду. Хтось має ідею, як стерти кеш-пам'ять, яку використовує компілятор?

Відповіді:


701

У Flash все ще є файл ASO, який є компільованим байтовим кодом для ваших класів. У Windows ви можете побачити файли ASO тут:

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

На Mac структура структури каталогів схожа в /Users/username/Library/Application Support/


Ви можете видалити ці файли вручну, або у Flash можна вибрати їх, Control->Delete ASO filesщоб видалити їх.


34
Скопійовано знизу: Ця та інша, дуже схожа відповідь - саме те, що я шукав, але, на жаль, не вирішує проблему. Я буду крейдувати цю програму до помилки Adobe bug. Я все-таки позначаю це як вирішене.
Ендер

292
PS: Я клацнув пунктом меню знову і знову. Я занурився глибоко в структуру файлів у пошуках, щоб остаточно викреслити файли, що містять останні відгомони Джені. Їх там немає. Коли я запитую про них, Flash просто бурмотить щось незрозуміле і дивиться в космос. Я думаю, що я можу почати щось чути над шаленим забиванням кнопки миші. Дженін сміється.
Ендер

23
@Ender, чи відчуваєш ти таку ж проблему, якщо ти свіже складеш код у новому полі. Як свіжа перевірка коду на новий комп'ютер? Це повинно сказати вам, чи є проблема з кодом або тим, що затримується у вашій файловій системі *.
Джессі Вебб

197

Спробуйте видалити файли ASO.

Файли ASO - це кешовані компільовані версії файлів вашого класу. Хоча IDE набагато краще відпускати старі кеші, коли вносяться зміни, іноді доводиться видаляти їх вручну. Щоб видалити файли ASO: Керування> Видалити файли ASO.

Це також є причиною помилки "Я не бачу-бачу-міняю-так-пускаю-до-додаю-сліду-тепер-все-працює", яка була введена в CS3.


165

Що робити, якщо скласти його на іншій машині? Свіжий встановлений був би чудовим. Я сподіваюся, що ваша машина не ревнує.


125

Я виявив одне пов'язане поведінку, яке може допомогти (схоже, що ваша конкретна проблема заглиблюється):

Flash перевіряє, чи потрібний перекомпіляція вихідного файлу, переглядаючи часові позначки. Якщо його компільована версія старша вихідного файлу, вона буде перекомпільована. Але він не перевіряє, чи складена версія була створена з того самого вихідного файлу чи ні.

Зокрема, якщо у вас є файли сценаріїв під контролем версій, і ви скасуєте зміну, повернутий файл, як правило, матиме старіший часовий відміток, і Flash його ігнорує.


12
Правда, я працюю над кількома проектами з розробниками з Південної Африки та Лондона. Коли ми передаємо флеш-файли вперед і назад, нам доведеться зберігати їх локально, оскільки компіляція спричинить шалену помилку на основі часової позначки файлу. По суті, спроба скласти спалах, який було збережено в майбутньому, - це проблема. Ми з'ясували це, змінивши дату на нашій ОС. Спробуйте перевірити мітку часу.
Домінік Танкреди

103

Крім того, для використання нового класу з простором імен ви також можете це зробити

var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()

96

У вас є кілька swf-файлів? Якщо ваш клас імпортується в одному з SWF, інші SWF також використовуватимуть ту саму версію класу. Один старий імпорт з * в одному SWF зробить це. Перекомпілюйте все і подивіться, чи працює він.


10
Так, я вважаю, що Дженнін збирається в якусь іншу частину вашого коду, або SWF, або SWC, який ви використовуєте.
Арпіт

11

Використовуйте grepаналог, щоб знайти рядки oldnamespaceта Jenineвсередині файлів у всій папці проекту. Тоді ви б знали, що робити далі.


4
Мій власний здогад щодо того, чому ви знялися з посади, - це те, що ви дали досить очевидну відповідь і рішуче натякали, що це вирішить проблему. Ваша відповідь не обов'язково є поганою, але ваше фразування може бути витлумачено як невиправдано переконливе або високорозуміле, що іноді дратує людей.
Ерханніс

5
Хм. Можливо, ти маєш рацію. З іншого боку, це засмучує, коли запитання не дає відповідей на очевидні питання, як у мене. Щось на кшталт "Я шукав рядок Jenine у ​​всіх файлах, але не зміг знайти відповідність". Мене заінтригує Я хочу розгадати цю таємницю. Але автор залишає мене повішеним.
Арк-кун

3
Як я вже сказав, ваша відповідь не обов'язково була поганою; можливо, просто так було те, що ваша фраза когось дратувала. Чесно кажучи, це була моя перша реакція. Я, як правило, намагаюся сказати речі таким чином, як " сподіваюся, це допоможе", враховуючи, що так часто справжня причина не в тому, що ви думаєте. Знову я погоджуюся, що ваша відповідь - це те, що варто спробувати, і тому заслуговує на розгляд як подану відповідь, але фразування часом впливає на людей більше, ніж потрібно.
Ерханніс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.