Question Flash CS4 refuse de lâcher prise


J'ai un projet Flash, et il a beaucoup de fichiers sources. J'ai une classe assez fortement utilisée, appelez-la Jenine. J'ai récemment (et, peut-être, avec insistance) déplacé Jenine d'un espace de noms à un autre. Je pensais que nous étions prêts - je pensais qu'il était temps. La nouvelle Jenine était meilleure à tous points de vue - elle avait perdu du code, elle s'était découplée de quelques relations vestigiales, et elle était enfin revenue à l'espace de noms qu'elle avait toujours secrètement connu dans son cœur. appartenu à. Elle était parmi ses semblables.

Malheureusement, Flash n'aurait rien de tout ça. Peut-être avait-il formé un attachement. Peut-être que ça n'a pas vouloir Jenine à découpler. De toute façon, il se cramponnait à la vieille version parfaite de Jenine dans sa mémoire. Il a refusé de continuer. Il a ignoré ses appels (de fonction). Il a essayé d'oublier ses nouvelles interfaces publiques. Au lieu de cela, chaque instance de Jenine qu'elle a construite était toujours une copie de l'ancienne version, jusqu'à son classpath:

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

Nous nous sommes battus. Je ne suis pas fier de certaines choses que j'ai dites ou faites. À la fin, dans un accès de colère, j'ai supprimé toutes les références de Jenine complètement. Elle était complètement, complètement effacée du système. Mon curseur est tombé sur l'option de menu "Vider la corbeille" comme le couvercle froid d'un cercueil.

Je ne pense pas que Flash ait jamais récupéré. À ce jour, il s'accroche toujours à la mémoire de Jenine. Ses vieilles définitions imparfaites flottent encore à travers mon projet comme des fantômes abandonnés. Chaque fois que je force Flash à compiler, il l'insère toujours amoureusement dans mon film, nichant sa définition parmi les autres, des classes vivantes, comme un petit sanctuaire. Je me demande s'ils peuvent la voir.

Flash et je ne parle plus vraiment. J'écris mon code, il le compile. Il y a une nouvelle fille en ville nommée Summer qui ressemble presque à Jenine, comme si quelqu'un venait de copier son code source en gros dans une nouvelle classe, mais Flash n'a montré aucun intérêt. La plupart du temps, ça ne fait que trimer et écrire de la mauvaise poésie dans mes commentaires quand elle pense que je ne regarde pas.

J'espère que personne d'autre n'a vécu une expérience similaire, que c'est juste une ondulation singulière et douloureuse dans l'horrible lagon sombre qu'est le code-base Flash. Si, par hasard, vous avez une chance, ou si vous avez une idée de la manière d'effacer le foutu cache utilisé par le compilateur, s'il vous plaît, aidez-nous.


2694
2018-02-03 17:32


origine


Réponses:


Flash a toujours le fichier ASO, qui est le code octet compilé pour vos classes. Sous Windows, vous pouvez voir les fichiers ASO ici:

C:\Documents and Settings\username\Local Settings\Application Data\Adobe\Flash CS4\en\Configuration\Classes\aso

Sur un Mac, la structure du répertoire est similaire /Users/username/Library/Application Support/ 


Vous pouvez supprimer ces fichiers à la main, ou dans Flash, vous pouvez sélectionner Control->Delete ASO files pour les enlever.


693
2018-02-03 18:49



Essayez de supprimer vos fichiers ASO.

Les fichiers ASO sont des versions compilées en cache de vos fichiers de classe. Bien que l'EDI soit beaucoup mieux à lâcher d'anciennes caches quand des changements sont faits, vous devez parfois les supprimer manuellement. Pour supprimer des fichiers ASO: Contrôle> Supprimer les fichiers ASO.

C'est aussi la cause du bogue "Je ne suis pas en train de voir, de changer, de me laisser, de tout ajouter, de tout, tout ce qui marche" qui a été introduit dans CS3.


198
2018-02-03 18:40



Que faire si vous le compilez en utilisant une autre machine? Un installé frais serait adorable. J'espère votre machine n'est pas jaloux.


164
2018-02-03 20:25



J'ai trouvé un comportement lié qui peut aider (semble que votre problème spécifique est plus profond cependant):

Flash vérifie si un fichier source doit être recompilé en regardant les horodatages. Si sa version compilée est plus âgée que le fichier source, il va recompiler. Mais il ne vérifie pas si la version compilée a été générée à partir du même fichier source ou non.

Plus précisément, si vous avez vos fichiers actionscript sous contrôle de version et que vous rétablissez une modification, le fichier restauré aura généralement un horodatage plus ancien et Flash l'ignorera.


125
2018-02-03 18:04



En outre, pour utiliser votre nouvelle classe de noms, vous pouvez également faire

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

102
2018-02-05 16:55



Avez-vous plusieurs fichiers swf? Si votre classe est importée dans l'un des swf, les autres swf utiliseront également la même version de la classe. Une ancienne importation avec * dans un swf le fera. Recompilez tout et voyez si cela fonctionne.


96
2018-02-04 04:26



Utiliser un grep analogique pour trouver les chaînes oldnamespace et Jenine à l'intérieur des fichiers dans votre dossier de projet entier. Ensuite, vous savez quelle étape à faire ensuite.


10
2017-07-02 01:41