ChatGPT解决这个技术问题 Extra ChatGPT

Flash CS4 不肯放手

我有一个 Flash 项目,它有很多源文件。我有一个相当常用的类,叫它 Jenine。我最近(也许是无情地)将 Jenine 从一个命名空间迁移到另一个命名空间。我以为我们准备好了——我以为是时候了。新的珍妮在各方面都变得更好了——她减少了一些代码膨胀,她把自己从一些退化的阶级关系中解脱出来,她终于回到了她一直在心里暗自知道的名字空间是她真正的名字曾经属于。她属于自己的同类。

不幸的是,Flash 没有这些。或许,它已经形成了一种依恋。也许它不想让珍妮脱钩。无论哪种方式,它都牢牢记住了旧的、完美的珍妮版本。它拒绝继续前进。它忽略了她的(函数)调用。它试图忘记她新的公共界面。相反,它构建的每个 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 代码库的可怕黑暗泻湖中的一个奇异而痛苦的涟漪。有谁知道如何擦除编译器正在使用的任何缓存?


A
Adam

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


从下面复制:这个和另一个非常相似的答案正是我想要的,但不幸的是似乎没有解决问题。我将把它归结为 Adobe bug fun tiem。但是,我将其标记为已解决。
PS:我一遍又一遍地点击菜单项。为了最终删除包含珍妮最后回声的文件,我深入研究了文件结构。他们不在那里。当我问起他们时,Flash 只是咕哝着一些语无伦次的东西,然后凝视着太空。我想我可以开始听到疯狂敲击鼠标按钮的声音。珍妮在笑。
@Ender,如果您在新盒子上新编译代码,您是否会遇到同样的问题。就像在新计算机上重新签出代码一样?这应该告诉您它是否是代码问题或文件系统上挥之不去的东西*。
M
Michael Myers

尝试删除您的 ASO 文件。

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

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


R
Rodrigo Strauss

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


L
Laurie Cheers

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

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

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


诚然,我与来自南非和伦敦的开发人员一起开展了几个项目。当我们来回传递 flash 文件时,我们必须将其保存在本地,因为编译会导致基于文件时间戳的疯狂错误。从本质上讲,尝试编译将来保存的闪存是问题所在。我们通过更改操作系统上的日期来解决这个问题。尝试检查您的时间戳。
A
Arpit

此外,要使用新的命名空间类,您还可以这样做

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

D
Dave

你有几个 swf 文件吗?如果您的类是在其中一个 swf 中导入的,则其他 swf 也将使用该类的相同版本。一个带有 * 的旧导入在一个 swf 中就可以了。重新编译一切,看看它是否有效。


是的,我打赌 Jenine 会被编译到您的代码的其他部分中,无论是您正在使用的 swf 还是 swc。
A
Ark-kun

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅