it-swarm.com.de

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 Jenine vor kurzem (und vielleicht auch rücksichtslos) von einem Namespace in einen anderen verschoben. Ich dachte wir wären bereit - ich dachte es wäre Zeit. Die neue Jenine war in jeder Hinsicht besser - sie hatte etwas Code-Bloat verloren, sich von ein paar rastlosen Klassenbeziehungen entkoppelt und war endlich in den Namensraum zurückgekehrt, von dem sie immer insgeheim gewusst hatte, dass er derjenige war, den sie wirklich war gehörte zu. Sie war unter ihrer eigenen Art.

Leider hätte Flash nichts davon. Vielleicht hatte es einen Eigensinn gebildet. Vielleicht wollte nicht, dass Jenine entkoppelt wurde. In jedem Fall hielt es an der alten, perfekten Version von Jenine fest. Es weigerte sich, weiterzumachen. Es ignorierte ihre (Funktions-) Anrufe. Es versuchte, ihre neuen öffentlichen Schnittstellen zu vergessen. Stattdessen war jede Instanz von Jenine, die sie erstellte, immer eine Kopie der alten Version, bis auf ihren 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 Dinge, die ich gesagt oder getan habe. Am Ende habe ich in einem Wutanfall alle Referenzen von Jenine komplett gelöscht. Sie wurde vollständig aus dem System gelöscht. Mein Cursor fiel auf die Menüoption "Papierkorb leeren" wie auf den kalten Deckel einer Schatulle.

Ich glaube nicht, dass sich Flash jemals erholt hat. Bis heute hält es an der Erinnerung an Jenine fest. Ihre alten, unvollständigen Definitionen schweben immer noch wie verlassene Geister durch mein Projekt. Wann immer ich Flash zum Kompilieren zwinge, fügt es sie immer noch liebevoll in meinen Film ein und fügt ihre Definition in die anderen, lebendigen Klassen ein, wie in einen kleinen Schrein. Ich frage mich, ob sie sie sehen können.

Flash und ich reden 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 hätte jemand gerade ihren Quellcode-Großhandel in eine neue Klasse kopiert, aber Flash hat kein Interesse gezeigt. An den meisten Tagen träumt es nur herum und schreibt schlechte Gedichte in meine Kommentare, wenn es denkt, ich schaue nicht hin.

Ich hoffe, niemand sonst hat eine ähnliche Erfahrung gemacht, dass dies nur eine seltsame, schmerzhafte Welle in der schrecklichen dunklen Lagune ist, die die Flash-Code-Basis darstellt. Hat jemand eine Idee, wie man den Cache löscht, den der Compiler verwendet?

2730
Ender

Flash verfügt weiterhin über die ASO-Datei, die den kompilierten Bytecode für Ihre Klassen darstellt. 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 in /Users/username/Library/Application Support/ ähnlich.


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

699
wpjmurray

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

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

Dies ist auch die Ursache für den in CS3 eingeführten Fehler "Ich sehe meine Änderungen nicht, also lass mich eine Ablaufverfolgung hinzufügen, die jetzt alles funktioniert".

198
Magocto

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

164
Rodrigo Strauss

Ich habe ein ähnliches Verhalten gefunden, das möglicherweise Abhilfe schafft (es hört sich an, als würde Ihr spezifisches Problem tiefer gehen):

Flash überprüft anhand von Zeitstempeln, ob eine Quelldatei neu kompiliert werden muss. Wenn die kompilierte Version älter als die Quelldatei ist, wird sie erneut kompiliert. Es wird jedoch nicht geprüft, ob die kompilierte Version aus derselben Quelldatei generiert wurde oder nicht.

Insbesondere wenn Ihre Actionscript-Dateien der Versionskontrolle unterliegen und Sie eine Änderung rückgängig machen, hat die rückgängig gemachte Datei normalerweise einen älteren Zeitstempel und Flash ignoriert diesen.

125
Laurie Cheers

Dies können Sie auch tun, um Ihre neue Namespace-Klasse zu verwenden

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

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

97
Dave

Verwenden Sie ein grep Analog, um die Zeichenfolgen oldnamespace und Jenine in den Dateien in Ihrem gesamten Projektordner zu finden. Dann wüsstest du, was als nächstes zu tun ist.

11
Ark-kun