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?
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".
quelle
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.
quelle
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.
quelle
Sie können auch Ihre neue Klasse mit Namespace verwenden
quelle
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.
quelle
Verwenden Sie ein
grep
Analog, um die Zeichenfolgenoldnamespace
undJenine
die Dateien in Ihrem gesamten Projektordner zu finden. Dann wissen Sie, welchen Schritt Sie als Nächstes tun müssen.quelle