Frage Flash CS4 weigert sich, loszulassen


Ich habe ein Flash-Projekt und es hat viele Quelldateien. Ich habe eine ziemlich stark genutzte Klasse, nenne sie Jenine. Ich habe kürzlich (und vielleicht auch kaltherzig) Jenine von einem Namespace zum anderen verlagert. Ich dachte, wir wären bereit - ich dachte, es wäre Zeit. Die neue Jenine war in jeder Hinsicht besser - sie hatte ein wenig Code-Bloat verloren, sie hatte sich von ein paar wenigen Klassenbeziehungen abgekoppelt, und sie war endlich in den Namensraum zurückgekehrt, den sie immer heimlich in ihrem Herzen kannte gehörte zu. Sie gehörte zu ihrer eigenen Art.

Leider würde Flash nichts davon haben. Vielleicht hatte es einen Anhang gebildet. Vielleicht hat es nicht wollen Jenine soll entkoppelt sein. Wie auch immer, es klammerte sich an die alte, perfekte Version von Jenine in seiner Erinnerung. Es weigerte sich weiterzugehen. Es ignorierte ihre (Funktions) Anrufe. Sie versuchte, ihre neuen, öffentlichen Schnittstellen zu vergessen. Stattdessen war jede erstellte Instanz von Jenine immer eine Kopie der alten Version, bis auf den Klassenpfad:

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

Wir kämpften. Ich bin nicht stolz auf einige der Dinge, die ich gesagt oder getan habe. Am Ende, in einem hoch aufragenden Wutanfall, habe ich alle Referenzen von Jenine komplett gestrichen. Sie wurde völlig, vollständig aus dem System gelöscht. Mein Cursor fiel auf die Menüoption "Müll entleeren" wie der kalte Deckel eines Sarges.

Ich glaube nicht, dass Flash sich je wieder erholt hat. Bis heute haftet es noch immer der Erinnerung an Jenine. Ihre alten, unvollkommenen Definitionen fließen wie verlassene Geister durch mein Projekt. Immer wenn ich Flash dazu zwinge zu kompilieren, fügt es sie immer noch liebevoll in meinen Film ein und fügt ihre Definition zwischen die anderen, lebende Klassen, wie einen kleinen Schrein ein. Ich frage mich, ob sie sie sehen können.

Flash und ich rede nicht mehr wirklich. Ich schreibe meinen Code, er kompiliert ihn. Es gibt ein neues Mädchen in der Stadt namens Summer, das fast identisch mit Jenine aussieht, als ob jemand gerade ihren Quellcode-Großhandel in eine neue Klasse kopiert hätte, aber Flash hat kein Interesse gezeigt. An den meisten Tagen schwirrt es herum und schreibt schlechte Gedichte in meine Kommentare, wenn es denkt, dass ich nicht hinsehe.

Ich hoffe, dass niemand sonst eine ähnliche Erfahrung gemacht hat, dass dies nur eine singuläre, schmerzhafte Welle in der entsetzlichen dunklen Lagune ist, die die Flash-Code-Basis ist. Wenn Sie zufällig eine Zufallswette haben oder eine Idee haben, wie Sie den verdammten Cache, den der Compiler verwendet, löschen wollen, bitte, bitte helfen Sie.


2694
2018-02-03 17:32


Ursprung


Antworten:


Flash verfügt weiterhin über die ASO-Datei, bei der es sich um den kompilierten Bytecode für Ihre Klassen handelt. Unter Windows können Sie die ASO-Dateien hier sehen:

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

Auf einem Mac ist die Verzeichnisstruktur ähnlich /Users/username/Library/Application Support/ 


Sie können diese Dateien manuell entfernen oder in Flash auswählen Control->Delete ASO files um sie zu entfernen.


693
2018-02-03 18:49



Versuchen Sie, Ihre ASO-Dateien zu löschen.

ASO-Dateien sind zwischengespeicherte kompilierte Versionen Ihrer Klassendateien. Obwohl die IDE viel besser darin ist, alte Caches zu löschen, wenn Änderungen vorgenommen werden, müssen Sie sie manchmal manuell löschen. So löschen Sie ASO-Dateien: Steuern> ASO-Dateien löschen.

Dies ist auch die Ursache für den in CS3 eingeführten Fehler "Ich-sehe-nicht-meine-Änderungen-so-lass-mich-hinzufügen-eine-Spur-jetzt-alles-Werke".


198
2018-02-03 18:40



Was, wenn Sie es mit einer anderen Maschine kompilieren? Ein frisch installierter wäre schön. ich hoffe deine Maschine ist nicht eifersüchtig.


164
2018-02-03 20:25



Ich habe ein verwandtes Verhalten gefunden, das helfen könnte (klingt, als ob Ihr spezifisches Problem tiefer geht):

Flash prüft anhand der Zeitstempel, ob eine Quelldatei neu kompiliert werden muss. Wenn seine kompilierte Version ist älter als die Quelldatei wird es neu kompiliert. Es wird jedoch nicht überprüft, ob die kompilierte Version aus der gleichen Quelldatei generiert wurde oder nicht.

Insbesondere, wenn Sie Ihre ActionScript-Dateien unter Versionskontrolle haben und Sie eine Änderung rückgängig machen, wird die wiederhergestellte Datei normalerweise einen älteren Zeitstempel haben, und Flash wird es ignorieren.


125
2018-02-03 18:04



Außerdem können Sie Ihre neue Namespace-Klasse verwenden

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

102
2018-02-05 16:55



Haben Sie mehrere SWF-Dateien? Wenn Ihre Klasse in eine der SWFs importiert wird, verwenden andere SWFs dieselbe Version der Klasse. Ein alter Import mit * in einem swf wird es tun. Kompiliere alles neu und schau, ob es funktioniert.


96
2018-02-04 04:26



Benutze einen grep analog, um die Saiten zu finden oldnamespace und Jenine innerhalb der Dateien in Ihrem gesamten Projektordner. Dann wüsstest du, was als nächstes zu tun ist.


10
2017-07-02 01:41