Flash CS4拒绝放手

我有一个Flash项目,它有许多源文件。 我有一个相当使用很多的类,叫做Jenine。 我最近(也许无情地)把Jenine从一个命名空间转移到另一个命名空间。 我以为我们已经准备好了 – 我以为是时候了。 新的Jenine在各方面都更好 – 她已经失去了一些代码膨胀,她已经脱离了一些退化的阶级关系,她终于回到了她一直秘密知道的名字空间是她真正的曾经属于。 她是她自己的。

不幸的是,Flash将不具备这一点。 也许它已经形成了一个依恋。 也许它不希望 Jenine分离。 无论哪种方式,它都记忆犹太的古老,完美的版本。 它拒绝继续前进。 它忽略了她(function)的呼叫。 它试图忘记她的新的公共接口。 相反,它构build的每个Jenine实例总是旧版本的副本,直到它的类path:

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

我们战斗。 我并不以我所说的或所做的一些事情为荣。 最后,在愤怒的高潮中,我完全删除了所有的耶琳的引用。 她完全被彻底清除了。 我的光标落在“清空垃圾箱”菜单选项上,如棺材的冷盖。

我不认为Flash已经恢复。 直到今天,它仍然依附于杰宁的记忆。 她那古老的,不完美的定义仍然像我被遗弃的鬼魂一样浮现在我的项目中。 无论什么时候我强迫Flash编译,它仍然将她插入到我的电影中,将她的定义与其他活生生的阶级,比如一个小型的圣地相提并论。 我想知道他们是否可以见到她。

闪光灯,我不再说话了。 我写我的代码,编译它。 有一个名叫Summer的城里有一个新女孩,看起来和Jenine几乎一模一样,好像有人刚刚把她的源代码批量拷贝到一个新class上,但是Flash并没有performance出任何兴趣。 大多数时候,它只是在我认为我没有看的时候,在我的评论中写下不好的诗。

我希望没有其他人有类似的经历,这只是一个令人震惊的黑暗泻湖中的一个奇怪的,痛苦的涟漪,就是Flash代码库。 如果由于某种偶然的机会,或者你有任何想法,如何清除编译器正在使用的任何该死的caching,请帮助。

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中select“ Control->Delete ASO files以将其删除。

尝试删除您的ASO文件。

ASO文件是caching的类文件的编译版本。 虽然IDE在更改旧版caching时要好得多,但有时您必须手动删除它们。 删除ASO文件:控制>删除ASO文件。

这也是CS3中引入的“我看不到我的变化,所以让我添加一个现在所有的东西”的错误。

如果你使用另一台机器编译它会怎么样? 一个新鲜安装的将是可爱的。 我希望你的机器不嫉妒。

我发现了一个可能有帮助的相关行为(听起来像你的具体问题,尽pipe更深入):

Flash通过查看时间戳来检查源文件是否需要重新编译。 如果它的编译版本比源文件 ,它将重新编译。 但是它并不检查编译版本是否是由相同的源文件生成的。

具体而言,如果您的版本控制下有您的动作文件,并且您还原了一个更改,则恢复的文件通常会有一个较旧的时间戳,Flash将忽略它。

而且,要使用新的命名空间类,您也可以这样做

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

你有几个SWF文件? 如果你的类是在一个swf中导入的,其他的swf也会使用同一个版本的类。 一个旧的import与*在一个瑞士法郎将做到这一点。 重新编译一切,看看它是否工作。

使用grep模拟来查找整个项目文件夹中文件中的stringoldnamespaceoldnamespace 。 然后你就会知道接下来要做什么。