Flash CS4拒绝放手

Flash CS4拒绝放手,flash,caching,flash-cs4,Flash,Caching,Flash Cs4,我有一个Flash项目,它有很多源文件。我有一个相当频繁使用的类,叫做Jenine。我最近(也许是无情地)将Jenine从一个名称空间重新定位到另一个名称空间。我以为我们准备好了——我以为是时候了。新的Jenine在各个方面都做得更好——她丢失了一些代码膨胀,她与一些残留的类关系脱钩,她终于回到了自己心中一直暗暗知道的名称空间,那是她真正属于的名称空间。她属于自己的同类 不幸的是,Flash没有这些功能。也许它形成了一种依恋。也许它不想让Jenine脱钩。不管怎样,它都在记忆中保留着杰宁的旧的、

我有一个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!
我们打架了。我对自己所说或所做的一些事情并不感到自豪。最后,我勃然大怒,完全删除了所有有关杰宁的内容。她被彻底地从系统中抹去了。我的光标落在“清空垃圾”菜单选项上,就像棺材的冷盖一样

我不认为Flash能康复。直到今天,它仍然留在杰宁的记忆中。她的旧的、不完美的定义仍然像被遗弃的幽灵一样在我的项目中飘荡。每当我强迫Flash编译时,它仍然会把她可爱地插入到我的电影中,把她的定义放在其他活生生的类中,就像一个小神殿。我不知道他们是否能看见她

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


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

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

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


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

尝试删除您的ASO文件

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


这也是CS3中引入的“I-am-not-seing-my-changes-so-let-me-add-a-trace-now-everything-works”错误的原因。

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
模拟查找整个项目文件夹中文件中的字符串
oldnamespace
Jenine
。然后你就会知道下一步要做什么。

从下面抄袭:这个和另一个非常相似的答案正是我想要的,但不幸的是,似乎无法解决问题。我要把这个归于Adobe bug fun tiem。不过,我要将它标记为已解决。PS:我已经反复单击菜单项。我深入研究了文件结构,试图最终删除包含Jenine最后回音的文件。他们不在那里。当我问起它们时,Flash只是含糊不清地说了些不连贯的话,然后凝视着太空。我想我可以开始听到我疯狂的敲击鼠标按钮的声音了。Jenine在笑。@Ender,如果你在一个新的盒子上新编译代码,你会遇到同样的问题吗。比如在新电脑上重新签出代码?这应该可以告诉您是否存在代码问题或文件系统中存在的问题*。没错,我与来自南非和伦敦的开发人员一起参与了几个项目。当我们来回传递flash文件时,我们必须将其保存在本地,因为编译会导致基于文件时间戳的错误。从本质上讲,试图编译一个将来保存的flash是一个问题。我们通过在操作系统上更改日期来解决这个问题。试着检查一下你的时间戳。是的,我打赌Jenine被编译成了你代码的其他部分,或者是你正在使用的swf或swc。我自己对你被否决的原因的猜测是,你给出了一个相当明显的答案,并强烈暗示这将解决问题。你的回答不一定是坏的,但你的措辞可能被解释为不合理的过度自信或傲慢,这是有人说的