关于缓存:Flash CS4拒绝放手

Flash CS4 refuses to let go

我有一个Flash项目,它有许多源文件。我有一门相当用功的课,叫珍妮。我最近(也许是冷酷无情地)将Jenine从一个名称空间重新定位到另一个名称空间。我以为我们准备好了-我以为是时候了。新的Jenine在所有方面都更好——她丢失了一些代码膨胀,脱离了一些残留的类关系,最后她回到了自己内心一直秘密知道的真正属于她的名称空间。她是同类中的一员。

不幸的是,flash不会有这些功能。也许它形成了一种依恋。也许它不想让珍妮脱钩。不管怎样,它在记忆中都紧紧抓住了珍妮的旧的、完美的版本。它拒绝继续前进。它忽略了她的(函数)调用。它试图忘记她的新的公共接口。相反,它构建的Jenine的每个实例都始终是旧版本的副本,一直到类路径:

1
2
3
4
5
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一模一样,好像有人刚刚把她的源代码批发复制到一个新的类中,但Flash没有表现出任何兴趣。大多数时候,当它认为我不在看的时候,它只是在我的评论中闷闷不乐地写糟糕的诗。

我希望没有其他人有类似的经验,这只是一个奇怪的,痛苦的涟漪在可怕的黑暗泻湖,这是闪存代码基础。如果你有侥幸的机会,或者你知道如何清除编译器使用的该死的缓存,请帮助。


flash仍然有aso文件,这是为类编译的字节代码。在Windows上,您可以在此处看到ASO文件:

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


尝试删除ASO文件。

ASO文件是缓存类文件的编译版本。虽然IDE在改变旧的缓存时更擅长,但有时你不得不手动删除它们。删除ASO文件:控件>删除ASO文件。

这也是导致在CS3中引入的"i-AM-NO-SET-MY变换-SO-LIT-ME-AD-A Trace-No.WorkWorksWorksBug"的原因。


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


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

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

具体来说,如果操作脚本文件在版本控制下,并且恢复更改,则恢复的文件通常具有较旧的时间戳,而Flash将忽略它。


此外,要使用新的名称空间类,还可以

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

你有几个SWF文件吗?如果您的类是在某个SWF中导入的,其他SWF也将使用该类的相同版本。一个SWF中带有*的旧导入将完成此操作。重新编译所有内容,看看是否有效。


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