2009-07-28 19 views
10

(Altro pacchetto/componente installazione divertente per me - grazie a tutti per tutto il vostro aiuto fino ad oggi)."Impossibile caricare il pacchetto A, contiene l'unità X, che è anche contenuta nel pacchetto B"

Ho ricevuto l'errore elencato come titolo, in Delphi 2007. Il pacchetto A è il mio pacchetto di "pannelli di visualizzazione" basati su frame. Il pacchetto B è un pacchetto contenente un paio di componenti che vengono utilizzati per mostrare informazioni sui dataset collegati a un database gven (il loro SQL, stato, tipo di classe, ecc.), Uno dei quali è un componente non visivo (lo chiameremo l'ispettore) che crea e chiama un modulo che mostra tali informazioni. L'unità X è l'unità di quella forma.

Ho aggiunto il componente Inspector a uno dei pannelli del mio viewer in Package, ma da allora lo ho eliminato e non posso trovare alcun riferimento ad esso in View Source per il progetto, né nell'unità del pannello di visualizzazione frame-based I aggiunto a Dove si nasconde il riferimento?

Inoltre, cosa farebbe aggiungere questo componente Inspector a uno dei riquadri del pannello di visualizzazione (che vengono installati anche come componenti registrati), causa questo problema?

Questo è probabilmente legato alla this previous question e this one pure, ma ho deciso di ricominciare con questo specifico symtpom/problema, solo per tenerlo succinta e chiara, e si spera quindi utile a qualcun altro più tardi. Grazie in anticipo per qualsiasi aiuto.


Aggiornamento:

Grazie a Loren, sono stato in grado di trovare e rimuovere il riferimento usi che è rimasto ed è stato la causa del problema. TUTTAVIA, non sono ancora chiaro su come realizzare ciò che sto cercando di realizzare. : \ Ecco le ultime:

Inspector è un semplice componente non visuale che contiene una proprietà DataSet e un "Modulo informazioni" interno. La chiamata di un metodo ShowInfo crea il modulo e lo popola con varie informazioni correlate al DataSet collegato. Sto volendo usarlo per eseguire il debug SQL che guida gli spettatori.

Come accennato in precedenza, Inspector è contenuto nel pacchetto B. Gli spettatori sono nel pacchetto A. Voglio usare il componente Inspector su alcuni dei discendenti TFrame (che si registrano come componenti della tavolozza vera). Tuttavia, quando si rilascia quel componente sul TFrame specificato per utilizzarlo e compilare/installare il pacchetto A, viene visualizzato il messaggio "Impossibile caricare il pacchetto A, contiene l'unità X, che è contenuta anche nell'errore del pacchetto B". Ora è chiaramente la causa, e posso ricreare il problema su richiesta. suggerimento

di moobaa di sotto ha un senso, eppure sembra che anche se io sto cercando di fare approccio # 2 di quello che suggerisce, non funziona. Cosa mi manca? Sembra che questo dovrebbe essere fattibile, e in effetti sembra che la maggior parte dei pacchetti che ho visto utilizzi sempre altri pacchetti installati (incluso il VCL stesso).

Nota: il pacchetto B non dipende dal pacchetto A, per quanto ne so (e l'ho installato da solo, quindi sembra essere d'accordo).

(A proposito, ci sono strumenti per "tracciare una mappa" le dipendenze dei pacchetti come questo? Sto utilizzando D2007)

Come sempre, grazie per il vostro tempo e aiuto.

+0

Che cos'è il pacchetto A e B nel tuo caso? Ricevo lo stesso errore che si legge: Impossibile caricare il pacchetto 'Abbrevia160'. Contiene l'unità 'AbDfBase', che è anche contenuta nel pacchetto 'Abbrevia'. Abbrevia e Abbrevia160 sono gli stessi identici pacchetti. Il 160 è semplicemente un suffisso ... Qualche idea? – ple103

risposta

3

Solo perché hai eliminato il componente non significa che hai eliminato il nome del modulo dalla clausola USES - quelli non sono cancellati automaticamente.

7

Potrebbe anche essere correlato a this question.

L'unità X è chiaramente collegata a entrambi i pacchetti.Ci sono un paio di modi per aggirare questo:

  • creare un nuovo pacchetto (che chiameremo Pacchetto C) con unità di X (ed eventuali altre dipendenze), poi cambiare Pacchetto A e pacchetto B per entrambi utilizzano Pacchetto C; oppure ...
  • include l'unità X nel pacchetto B e il pacchetto A utilizza il pacchetto B (che è una forma più compatta della prima soluzione).

Se gli spettatori sono esplicitamente menzionati nel codice Pacchetto B, poi il Pacchetto B sicuramente dovrebbe usare pacchetto A (cioè , ci dovrebbe essere una dipendenza esplicita lì). Se quell'indicazione di codice condiviso non è esplicitamente fatta, B compilerà la propria versione del codice in B, portando al problema che stai vedendo.

Ora, se questa dipendenza è OK, aggiungere un riferimento al Pacchetto A dal Pacchetto B dovrebbe risolvere immediatamente questo problema; dopotutto, B userà "il codice" nel pacchetto A e le stesse unità non verranno compilate in due pacchetti. Tuttavia, se questo introduce riferimenti circolari (non riesco a ricordare se A usa B o no), allora potresti avere un po 'di refactoring per:}

+0

Grazie. Non sto scoprendo come/dove Unit X viene collegata in A in questo punto (post-apparentemente-rimuovendo il riferimento del componente Inspector). Qualche suggerimento su come scoprirlo? Grazie ancora. – Jamo

+0

Provate una ricerca di grep per il nome dell'unità - come menzionato da Loren, non tutti i riferimenti nelle clausole di utilizzo vengono rimossi automaticamente. Inoltre, assicurarsi di rimuovere tutti i file dcu e dcp (come menzionato da Marco), quindi ricostruire tutto. – moobaa

+0

moobaa - grazie per quello. Ho aggiornato la domanda con più specifici sintomi di causa/effetto e apprezzerei molto qualsiasi altro pensiero/approfondimento che potresti avere. Grazie mille per i tuoi suggerimenti finora! – Jamo

0

Loren: richiede la clausola, poiché è un .dpk, non è possibile utilizzare pacchetti afaik.

avrei semplicemente ripulire il $ (BDSDIR)/progetti/dir, i miei progetti dir per rimuovere B.dcp e tutti DCU di per le unità che erano in B e poi ricostruire A.

Un'altra cosa per verificare se c'è un componente registrato che dipende da B.

+0

C'è un componente che dipende da B - l'Inspector stesso. MA non sto vedendo alcun riferimento diretto (usi in unità, o richiede nel file di progetto) a B in A a questo punto. C'è qualcos'altro da controllare? Proverò il consiglio del dcp. – Jamo

+0

Quello che intendevo era che un'unità veniva trascinata da Usi che porta qualcosa che non desidera. –

Problemi correlati