Flash CS4 weigert sich loszulassen

2742

Ich habe ein Flash-Projekt und es hat viele Quelldateien. Ich habe eine ziemlich stark genutzte Klasse, nenne sie Jenine. Ich habe Jenine kürzlich (und vielleicht gefühllos) von einem Namespace in einen anderen verlegt. Ich dachte wir wären bereit - ich dachte es wäre Zeit. Die neue Jenine war in jeder Hinsicht besser - sie hatte etwas aufgeblähtes Code verloren, sie hatte sich von einigen Klassenresten entkoppelt und sie war endlich zu dem Namespace zurückgekehrt, von dem sie immer heimlich 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 es 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-) Aufrufe. Es versuchte, ihre neuen öffentlichen Schnittstellen zu vergessen. Stattdessen war jede Instanz von Jenine, die sie konstruierte, bis auf ihren Klassenpfad immer eine Kopie der alten Version:

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 habe ich in einem gewaltigen Wutanfall alle Referenzen von Jenine vollständig gelöscht. Sie wurde vollständig aus dem System gelöscht. Mein Cursor fiel auf die Menüoption "Leerer Papierkorb" wie der kalte Deckel eines Sarges.

Ich glaube nicht, dass sich Flash jemals erholt hat. Bis heute erinnert es an Jenine. Ihre alten, unvollkommenen Definitionen schweben immer noch wie verlassene Geister durch mein Projekt. Immer wenn ich Flash zum Kompilieren zwinge, fügt es sie liebevoll in meinen Film ein und schmiegt ihre Definition wie einen kleinen Schrein in die anderen lebenden Klassen. 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 macht es sich nur Sorgen und schreibt schlechte Gedichte in meine Kommentare, wenn es denkt, dass ich nicht hinschaue.

Ich hoffe, niemand anderes hat eine ähnliche Erfahrung gemacht, dass dies nur eine einzigartige, schmerzhafte Welle in der schrecklichen dunklen Lagune ist, die die Flash-Codebasis darstellt. Hat jemand eine Idee, wie der vom Compiler verwendete Cache gelöscht werden kann?

Ender
quelle

Antworten:

701

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 in ähnlich /Users/username/Library/Application Support/


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

wpjmurray
quelle
34
Von unten kopiert: Diese und die andere, sehr ähnliche Antwort sind genau das, wonach ich gesucht habe, scheinen das Problem aber leider nicht zu lösen. Ich werde dieses mit Adobe Bug Fun Tiem kreiden. Ich werde es jedoch als gelöst markieren.
Ender
292
PS: Ich habe immer wieder auf den Menüpunkt geklickt. Ich bin tief in die Dateistruktur eingetaucht, um endlich die Dateien zu löschen, die die letzten Echos von Jenine enthalten. Sie sind nicht da. Wenn ich nach ihnen frage, murmelt Flash nur etwas Inkohärentes und starrt in den Weltraum. Ich glaube, ich kann etwas über das verrückte Hämmern meiner Maustaste hören. Jenine lacht.
Ender
23
@Ender, tritt das gleiche Problem auf, wenn Sie den Code auf einer neuen Box neu kompilieren. Wie ein neues Auschecken des Codes auf einen neuen Computer? Dies sollte Ihnen sagen, ob es sich um ein Problem mit dem Code oder um Dinge handelt, die auf Ihrem Dateisystem * verbleiben .
Jesse Webb
197

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 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 Spur hinzufügen, jetzt funktioniert alles".

Magocto
quelle
165

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.

Rodrigo Strauss
quelle
125

Ich habe ein verwandtes Verhalten gefunden, das helfen kann (es scheint, als ob Ihr spezifisches Problem tiefer geht):

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

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

Laurie Cheers
quelle
12
Natürlich arbeite ich an mehreren Projekten mit Entwicklern aus Südafrika und London. Wenn wir Flash-Dateien hin und her übergeben, müssen wir sie lokal speichern, da das Kompilieren einen verrückten Fehler verursacht, der auf dem Zeitstempel der Datei basiert. Im Wesentlichen ist der Versuch, einen Flash zu kompilieren, der in Zukunft gespeichert wurde, das Problem. Wir haben es herausgefunden, indem wir unser Datum auf unseren Betriebssystemen geändert haben. Versuchen Sie, Ihren Zeitstempel zu überprüfen.
Dominic Tancredi
103

Sie können auch Ihre neue Klasse mit Namespace verwenden

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

Hast du 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.

Dave
quelle
10
Ja, ich wette, Jenine ist in einem anderen Teil Ihres Codes kompiliert, entweder in einem SWF oder einem SWC, den Sie verwenden.
Arpit
11

Verwenden Sie ein grepAnalog, um die Zeichenfolgen oldnamespaceund Jeninedie Dateien in Ihrem gesamten Projektordner zu finden. Dann wissen Sie, welchen Schritt Sie als Nächstes tun müssen.

Ark-Kun
quelle
4
Meine eigene Vermutung, warum Sie abgelehnt wurden, wäre, dass Sie eine ziemlich offensichtliche Antwort gegeben und stark impliziert haben, dass dies das Problem lösen wird. Ihre Antwort ist nicht unbedingt schlecht, aber Ihre Formulierung könnte als ungerechtfertigt übermütig oder hochmütig interpretiert werden, was manchmal die Leute nervt.
Erhannis
5
Hmm. Vielleicht hast du Recht. Andererseits ist es frustrierend, wenn die Frage keine Antworten auf offensichtliche Fragen wie meine liefert. So etwas wie "Ich habe in allen Dateien nach der Zeichenfolge Jenine gesucht, aber keine Übereinstimmung gefunden". Ich bin fasziniert. Ich möchte dieses Rätsel lösen. Aber der Autor lässt mich hängen.
Ark-Kun
3
Wie gesagt, Ihre Antwort war nicht unbedingt schlecht. Möglicherweise hat Ihre Formulierung jemanden verärgert. Ehrlich gesagt war das meine erste Reaktion. Ich versuche im Allgemeinen, Dinge in der Art von " hoffentlich hilft das" zu sagen , da die wahre Ursache der Dinge so häufig nicht die ist, die Sie denken würden. Auch hier stimme ich zu, dass Ihre Antwort etwas ist , das man versuchen sollte, und daher als eingereichte Antwort in Betracht gezogen werden sollte, aber die Formulierung beeinflusst die Menschen manchmal mehr als sie sollte.
Erhannis