2009-07-28 4 views
10

(Mehr Paket/Komponente installieren Spaß für mich - Vielen Dank für alle Ihre Hilfe bis heute)."Kann Paket A nicht laden, enthält Einheit X, die auch in Paket B enthalten ist"

Ich bekomme den Fehler als Titel in Delphi 2007 aufgelistet. Paket A ist mein Paket von Frame-basierten "Viewer-Panels." Paket B ist ein Paket, das einige Komponenten enthält, mit denen Informationen über Datasets angezeigt werden, die mit einer gven-Datenbank verknüpft sind (SQL, Status, Klassentyp usw.). Eine davon ist eine nicht visuelle Komponente (wir nennen sie) der Inspektor), der ein Formular erstellt und aufruft, das diese Informationen anzeigt. Einheit X ist die Einheit dieser Form.

Ich habe die Inspektor-Komponente zu einem meiner Viewer-Fenster in Paket hinzugefügt, aber seitdem gelöscht und kann weder in View Source für das Projekt noch in der Einheit des Frame-basierten Viewer-Bedienfelds I einen Verweis darauf finden fügte es hinzu. Wo versteckt sich die Referenz?

Auch, was würde das Hinzufügen dieses Inspector-Komponente zu einem der View-Panel Frames (die auch als registrierte Komponenten installiert werden), dieses Problem verursachen?

Dies ist wahrscheinlich im Zusammenhang mit this previous question und this one als auch, aber ich entschied mich, mit diesem speziellen symtpom/Problem zu beginnen, nur um es kurz und klar und hoffentlich so nützlich für jemand anderen später. Vielen Dank im Voraus für jede Hilfe.


Update:

Dank Loren konnte ich die uses Referenz finden und zu entfernen, die geblieben und wurde das Problem verursacht. JEDOCH weiß ich immer noch nicht, wie ich erreichen soll, was ich erreichen möchte. : \ Hier ist das Neueste:

Der Inspektor ist eine einfache nicht visuelle Komponente, die eine DataSet-Eigenschaft und ein internes "Info-Formular" enthält. Durch den Aufruf einer ShowInfo-Methode wird das Formular erstellt und mit verschiedenen Informationen zum verknüpften DataSet gefüllt. Ich möchte es verwenden, um das SQL zu debuggen, das die Zuschauer antreibt.

Wie oben erwähnt, ist der Inspektor in Paket B enthalten. Die Viewer befinden sich in Paket A. Ich möchte die Inspektor-Komponente für einige der TFrame-Nachkommen verwenden (die sich als echte Palettenkomponenten registrieren). Wenn ich diese Komponente auf den angegebenen TFrame setze, um sie zu verwenden und Paket A zu kompilieren/installieren, erhalte ich den Fehler "Paket A nicht laden, es enthält Einheit X, die auch in Paket B enthalten ist". Es ist jetzt eindeutig die Ursache, und ich kann das Problem auf Anfrage neu erstellen.

moobaa Vorschlag unten macht Sinn, und doch ist es scheint, dass, obwohl ich versuche, Ansatz # 2 von dem zu tun, was er vorschlägt, funktioniert es nicht. Was vermisse ich? Es scheint, dass dies machbar sein sollte, und in der Tat scheint es, als ob die meisten Pakete, die ich gesehen habe, ständig andere installierte Pakete verwenden (einschließlich der VCL selbst).

Hinweis: Paket B hängt nicht von Paket A ab, soweit ich das beurteilen kann (und ich habe es eigenständig installiert, das scheint also zu stimmen).

(BTW, gibt es irgendwelche Werkzeuge, um „Diagramm aus“ Paketabhängigkeiten wie das? Ich bin mit D2007)

Wie immer, vielen Dank für Ihre Zeit und Hilfe.

+0

Was ist Paket A & B in Ihrem Fall? Ich bekomme den gleichen Fehler, der lautet: Das Paket 'Abbrevia160' kann nicht geladen werden. Es enthält die Einheit 'AbDfBase', die auch im Paket 'Abbrevia' enthalten ist. Abbrevia und Abbrevia160 sind genau die gleichen Pakete. Die 160 ist nur ein Suffix ... Irgendwelche Ideen? – ple103

Antwort

3

Nur weil Sie die Komponente gelöscht haben bedeutet nicht, dass Sie die gelöscht haben Modulname aus der USES-Klausel - diese werden nicht automatisch gelöscht.

7

Es könnte sich auch beziehen auf this question.

Einheit X wird eindeutig in beide Pakete eingebunden.Es gibt ein paar Möglichkeiten, um dieses:

  • erstellen ein neues Paket (wir nennen es Package C) mit Einheit X (und alle anderen Abhängigkeiten), dann ändern Paket A und Paket B zu verwenden beide Paket C; oder ...
  • enthalten Einheit X in Paket B, und Paket A verwenden Paket B (die eine kompaktere Form der ersten Lösung ist).

Wenn die Zuschauer explizit in Ihrem Paket B-Code genannt werden, dann Paket B ganz sicher sein sollte Paket A (dh, soll es eine explizite Abhängigkeit da sein). Wenn dieser Hinweis auf gemeinsamen Code nicht explizit gemacht wird, kompiliert B seine eigene Version des Codes in B, was zu dem Problem führt, das Sie sehen.

Jetzt, wenn diese Abhängigkeit in Ordnung ist, sollte das Hinzufügen eines Verweises auf Paket A aus Paket B dieses Problem sofort beheben; schließlich wird B den Code in Paket A "benutzen", und die gleichen Einheiten werden nicht in zwei Pakete kompiliert. Wenn dies jedoch zirkuläre Referenzen einführt (ich kann mich nicht erinnern, ob A B verwendet oder nicht), dann haben Sie möglicherweise ein wenig Refactoring zu:}

+0

Danke. Ich finde nicht heraus, wie/wo Einheit X zu diesem Zeitpunkt in A verknüpft wird (nachdem die Inspector-Komponentenreferenz scheinbar entfernt wurde). Irgendwelche Vorschläge, wie man das herausfindet? Danke noch einmal. – Jamo

+0

Versuchen Sie eine grep Suche nach dem Gerätenamen - wie Loren erwähnte, werden nicht alle Verweise in Verwendungen automatisch entfernt. Achten Sie auch darauf, alle Ihre dcu & dcp-Dateien zu entfernen (wie von Marco erwähnt) und dann alle neu zu erstellen. – moobaa

+0

moobaa - danke dafür. Ich habe die Frage mit spezifischeren Ursache-Wirkungs-Symptomen aktualisiert und würde mich über zusätzliche Gedanken/Einsichten sehr freuen. Danke so mcuh für deine Vorschläge bis jetzt! – Jamo

0

Loren: erfordert Klausel, da es eine .dpk ist, können Sie keine Pakete afaik verwenden.

Ich würde einfach die $ (BDSDIR)/Projekte/dir, meine eigenen Projekte dir für die Geräte zu entfernen B.dcp und alle DCU des aufzuräumen, die in B waren und dann

Eine andere Sache, A. Wiederaufbau um zu prüfen, ob eine Komponente registriert ist, die von B abhängt.

+0

Es gibt eine Komponente, die von B abhängt - der Inspector selbst. ABER ich sehe keine direkte Referenz (verwendet in Einheiten oder erfordert in Projektdatei) zu B in A an dieser Stelle. Gibt es woanders zu überprüfen? Ich werde den DCP-Rat versuchen. – Jamo

+0

Was ich meinte, war, dass eine Einheit von einem Nutzen herangezogen wird, der etwas bringt, was er nicht will. –