Flash CS4 отказывается отпускать - PullRequest
2727 голосов
/ 03 февраля 2010

У меня есть проект Flash, и в нем много исходных файлов.У меня довольно популярный класс, назовите его Дженин.Я недавно (и, возможно, бессердечно) перевез Дженин из одного пространства имен в другое.Я думал, что мы были готовы - я думал, что пришло время.Новая Дженина была лучше во всех отношениях - она ​​потеряла часть кода, она развязала себя от нескольких рудиментарных классовых отношений, и она наконец-то вернулась домой в пространство имен, которое она всегда тайно знала в своем сердце - это то, что она действительнопринадлежал.Она была в своем роде.

К сожалению, у Флэша ничего этого не было.Возможно, это сформировало приложение.Возможно, это не хотело бы развязать Дженин.Так или иначе, это цеплялось за старую, прекрасную версию Дженин в ее памяти.Он отказался двигаться дальше.Он игнорировал ее (функцию) вызовов.Он пытался забыть ее новые общедоступные интерфейсы.Вместо этого каждый экземпляр Jenine, который он сконструировал, всегда был копией старой версии вплоть до ее пути к классу:

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 не проявил никакого интереса.В большинстве случаев он просто бездельничает и пишет плохие стихи в моих комментариях, когда думает, что я не смотрю.

Я надеюсь, что ни у кого больше не было подобного опыта, что это просто необычная, болезненная пульсация вУжасающая темная лагуна, которая является базой кода Flash.Кто-нибудь знает, как стереть кеш, который использует компилятор?

Ответы [ 7 ]

698 голосов
/ 03 февраля 2010

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, чтобы удалить их.

198 голосов
/ 03 февраля 2010

Попробуйте удалить файлы ASO.

ASO-файлы - это кешированные скомпилированные версии ваших файлов классов. Хотя среда IDE намного лучше освобождает старые кэши при внесении изменений, иногда вам приходится их вручную удалять. Чтобы удалить файлы ASO: «Управление»> «Удалить файлы ASO».

Это также является причиной ошибки "Я не вижу своих изменений, поэтому дай мне добавить трассировку теперь все работает", которая была представлена ​​в CS3. *

164 голосов
/ 03 февраля 2010

Что если вы скомпилируете его на другом компьютере? Свежий установленный был бы прекрасен. Надеюсь ваша машина не ревнует.

125 голосов
/ 03 февраля 2010

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

Flash проверяет, нуждается ли исходный файл в перекомпиляции, просматривая временные метки.Если его скомпилированная версия старше , чем исходный файл, он будет перекомпилирован.Но он не проверяет, была ли скомпилированная версия сгенерирована из того же исходного файла или нет.

В частности, если у вас есть файлы ActionScript под управлением версией, и вы отменили изменение, обычно возвращаемый файл будет иметьболее старая временная метка, и Flash ее игнорирует.

103 голосов
/ 05 февраля 2010

Кроме того, чтобы использовать новый класс пространства имен, вы также можете сделать

var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()
97 голосов
/ 04 февраля 2010

У вас есть несколько swf-файлов? Если ваш класс импортирован в один из SWF-файлов, другие SWF-файлы также будут использовать ту же версию класса. Один старый импорт с * в одном SWF сделает это. Перекомпилируйте все и посмотрите, работает ли это.

11 голосов
/ 02 июля 2013

Используйте аналог grep, чтобы найти строки oldnamespace и Jenine внутри файлов во всей папке вашего проекта.Тогда бы вы знали, что делать дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...