Flash CS4 отказывается отпускать

2742

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

К сожалению, у 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. У кого-нибудь есть идеи, как стереть кеш, который использует компилятор?

Эндер
источник

Ответы:

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удалить их.

wpjmurray
источник
34
Скопировано снизу: этот и другой, очень похожий ответ - именно то, что я искал, но, к сожалению, похоже, не решил проблему. Я собираюсь записать это на Adobe Bug Fun Tiem. Однако я собираюсь отметить это как решенное.
Завершить
292
PS: я нажимал на пункт меню снова и снова. Я погрузился глубоко в файловую структуру в поисках, чтобы окончательно удалить файлы, которые содержат последние отголоски Дженина. Их там нет. Когда я спрашиваю о них, Флэш просто бормочет что-то несвязное и смотрит в космос. Я думаю, что могу начать что-то слышать из-за безумного удара моей кнопки мыши. Дженин смеется
Завершить
23
@ Конец, у вас возникла та же проблема, если вы только что скомпилировали код в новом окне. Как новая проверка кода на новом компьютере? Это должно сказать вам, является ли это проблемой с кодом или вещами, задерживающимися в вашей файловой системе *.
Джесси Уэбб
197

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

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

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

Magocto
источник
165

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

Родриго Штраус
источник
125

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

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

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

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

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

var jenine:com.newnamespace.subspace.Jenine = com.newnamespace.subspace.Jenine()
Arpit
источник
96

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

Дейв
источник
10
Да, держу пари, что Дженин скомпилирован в какую-то другую часть вашего кода, либо SWF, либо SWC, который вы используете.
Арпит
11

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

Арк-кун
источник
4
Мое собственное предположение о том, почему вы получили отрицательный голос, состоит в том, что вы дали довольно очевидный ответ и твердо намекаете, что это решит проблему. Ваш ответ не обязательно плохой, но ваши фразы могут быть истолкованы как неоправданно самоуверенные или надменные, что иногда раздражает людей.
Эрханнис
5
Хм. Может быть, вы правы. С другой стороны, расстраивает, когда вопрос не дает ответов на очевидные вопросы, такие как мой. Что-то вроде «Я искал строку Дженин во всех файлах, но не смог найти совпадение». Я заинтригован. Я хочу разгадать эту тайну. Но автор оставляет меня в покое.
Арк-кун
3
Как я уже сказал, ваш ответ не обязательно был плохим; возможно, это просто что-то раздражало. Честно говоря, это была моя первая реакция. Я обычно пытаюсь говорить что-то в духе « надеюсь, это поможет», учитывая, что реальная причина вещей очень часто не та, о которой вы думаете. Опять же, я согласен, что ваш ответ - это то, что нужно попробовать, и поэтому заслуживает рассмотрения как представленный ответ, но формулировка иногда влияет на людей больше, чем следовало бы.
Erhannis