Flash CS4拒绝放手


2742

我有一个Flash项目,它有许多源文件。我有一个使用率很高的班级,称为Jenine。我最近(也许是无情地)将Jenine从一个名称空间重定位到另一个名称空间。我以为我们已经准备好了-我以为是时候了。新的Jenine在各个方面都比较好-她失去了一些代码膨胀,使自己脱离了一些残余的类关系,并且终于回到了她心中一直秘密地知道的那个真正的命名空间。曾经属于。她属于自己的同类。

不幸的是,Flash根本没有。也许它已经形成了一种依恋。也许它不希望 Jenine脱钩。无论哪种方式,它都紧紧抓住了珍妮的旧版本。它拒绝继续前进。它忽略了她的(职能)电话。它试图忘记她的新公共界面。相反,它构造的每个Jenine实例始终是旧版本的副本,直到其类路径:

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

我们战斗了。我为自己所说的或所做的某些事情感到骄傲。最后,由于愤怒,我完全删除了Jenine的所有参考文献。她完全被系统清除了。我的光标落在“空垃圾箱”菜单选项上,例如棺材的冷盖。

我认为Flash无法恢复。直到今天,它仍然紧贴着珍妮的记忆。她那古老的,不完美的定义仍然像遗弃的鬼魂一样贯穿我的项目。每当我强迫Flash进行编译时,它仍会把她深深地插入我的电影中,将她的定义像其他小神rine一样安放在其他生活类中。我想知道他们是否可以看到她。

Flash,我不再谈论了。我编写代码,然后对其进行编译。镇上有一个名叫Summer的新女孩,看起来和Jenine几乎一样,好像有人刚刚将她的源代码批发复制到了一个新类中一样,但是Flash并没有表现出任何兴趣。在大多数日子里,它只是在四处张望,并在认为自己不在时在我的评论中写出不良诗歌。

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

Answers:


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


34
从下面复制:这个和另一个非常相似的答案正是我在寻找的东西,但不幸的是似乎无法解决问题。我将把这一问题归结为Adobe Bug Fun tiem。但是,我将其标记为已解决。
Ender 2010年

292
PS:我已经一遍又一遍地单击菜单项。为了深入研究包含Jenine最后回声的文件,我深入研究了文件结构。他们不在那里。当我问起它们时,Flash只是喃喃地说一些不连贯的东西,然后盯着太空。我想我可以从疯狂地敲击鼠标按钮开始听到一些声音。珍妮在笑。
Ender 2010年

23
@Ender,如果在新盒子上重新编译代码,是否会遇到相同的问题。像将代码重新签到新计算机上一样?这应该告诉你它是否是与代码或东西挥之不去的一个问题你的文件系统*。
杰西·韦伯

197

尝试删除您的ASO文件。

ASO文件是类文件的缓存编译版本。尽管在进行更改时IDE可以更好地释放旧的缓存,但是有时您必须手动删除它们。删除ASO文件:控制>删除ASO文件。

这也是CS3中引入的“我没有看到我的更改,所以我没有添加跟踪现在一切正常”错误的原因。



125

我发现一种相关的行为可能会有所帮助(听起来像是您的特定问题更严重):

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

具体来说,如果您的动作脚本文件受版本控制,并且您还原了更改,则还原后的文件通常将具有较旧的时间戳,而Flash将忽略它。


12
没错,我与南非和伦敦的开发人员一起从事多个项目。当我们来回传递闪存文件时,我们必须将其保存在本地,因为编译会基于文件的时间戳而引起疯狂的错误。本质上,尝试编译将来保存的闪存是问题所在。我们通过更改操作系统日期来解决这个问题。尝试检查您的时间戳。
Dominic Tancredi

103

另外,要使用新的命名空间类,您还可以

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

96

您有几个swf文件吗?如果您的班级是在某一个瑞士法郎中导入的,则其他瑞士法郎也将使用相同版本的班级。在一个瑞士法郎中使用*进行一次旧导入就可以做到这一点。重新编译所有内容,然后查看是否可行。


10
是的,我打赌Jenine会编译到您代码的其他部分,即您正在使用的swf或swc。
Arpit 2010年

11

使用grep类似物来查找字符串oldnamespaceJenine整个项目文件夹中的文件。然后,您将知道下一步该怎么做。


4
我自己对为什么被拒绝的猜测是,您给出了一个相当明显的答案,并强烈暗示它将解决问题。您的答案不一定很糟糕,但是您的措辞可能会被解释为过分自信或傲慢无礼,这有时会使人感到烦恼。
Erhannis

5
嗯 也许你是对的。另一方面,当问题没有提供像我这样的明显问题的答案时,这令人沮丧。类似于“我在所有文件中搜索了字符串Jenine,但找不到匹配项”。我很感兴趣 我想解决这个谜。但是作者让我垂涎三尺。
方舟坤

3
就像我说的,您的答案不一定很糟糕。可能只是因为您的措辞使某人烦恼。老实说,那是我的第一反应。我通常会尝试以“ 希望这会有所帮助” 的方式来说事情,因为这么多事情的真正原因并不是您想的那样。再次,我同意您的答案应该尝试的一种方法,因此值得考虑作为提交的答案,但是措辞有时对人们的影响超出应有的程度。
Erhannis 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.