Flash CS4拒绝放手

我有一个Flash项目,它有很多源文件。我有一个使用相当频繁的类,称之为Jenine。我最近(也许是冷酷无情地)将Jenine从一个命名空间迁移到另一个命名空间。我以为我们已经准备好了——我认为是时候了。新的Jenine在各个方面都更好——她失去了一些膨胀的代码,她已经与一些残留的类关系解耦,她终于回到了她内心一直秘密知道的命名空间,这是她真正属于的那个。她是她自己的同类。

不幸的是,Flash没有这些。也许它已经形成了一个附件。也许它没有想要 Jenine被解耦。不管怎样,它在内存中坚持旧的、完美的Jenine版本。它拒绝继续前进。它忽略了她(函数)调用。它试图忘记她新的公共接口。相反,它构建的每个Jenine实例总是旧版本的副本,直到它的类路径:

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

我们吵架了。我对自己说过或做过的一些事情并不感到自豪。最后,我一怒之下,完全删除了所有对杰宁的引用。她被彻底从系统中删除了。我的光标落在“空垃圾桶”菜单选项上,就像棺材的冷盖子一样。

我不认为Flash曾经恢复过。直到今天,它仍然依附在Jenine的记忆中。她的旧的,不完美的定义仍然像被遗弃的幽灵一样漂浮在我的项目中。每当我强迫Flash编译时,它仍然亲切地将她插入我的电影中,将她的定义依偎在其他生活类中,就像一个小神龛。我想知道他们是否能看到她。

我和Flash已经不再说话了。我写我的代码,它编译它。镇上有一个名叫Summer的新女孩,她看起来几乎和Jenine一模一样,好像有人刚刚将她的源代码批发复制到一个新类中,但Flash没有表现出任何兴趣。大多数时候,它只是闷闷不乐地走来走去,在我的评论中写下糟糕的诗歌,当它认为我没有注意的时候。

我希望没有其他人有过类似的经历,这只是Flash代码库中可怕的黑暗泻湖中的一个奇异的,痛苦的涟漪。有人知道如何擦除编译器正在使用的任何缓存吗?

112707 次浏览

我发现了一个相关的行为可能会有所帮助(听起来你的具体问题更深层次):

Flash通过查看时间戳来检查源文件是否需要重新编译。如果其编译版本比源文件老年,它将重新编译。但它不会检查编译版本是否从同一个源文件生成。

具体来说,如果您的actioncript文件处于版本控制之下,并且您恢复了更改,则恢复的文件通常会具有较旧的时间戳,而Flash会忽略它。

尝试删除您的ASO文件。

ASO文件是类文件的缓存编译版本。尽管IDE在更改时放弃旧缓存方面要好得多,但有时您必须手动删除它们。要删除ASO文件:控制>删除ASO文件。

这也是CS3中引入的“我不看我的变化”bug的原因。

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来删除它们。

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

你有几个swf文件吗?如果你的类被导入到其中一个swf中,其他swf也会使用相同版本的类。一个swf中带有*的旧导入就可以了。重新编译所有内容,看看它是否有效。

此外,要使用新的命名空间类,您还可以执行以下操作

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

使用grep模拟来查找整个项目文件夹中文件中的字符串oldnamespaceJenine。然后你就知道下一步该做什么了。