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?

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.


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".


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.


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.


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()

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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.