2010-08-22 22 views
5

(Ci scusiamo per potrebbe essere una domanda banale, vengo da Java & Maven, e ancora non hanno avvolto la mia mente intorno a C# dipendenze)Soluzioni C#: utilizzando un progetto "Globali" per le DLL esterne?

voglio usare log4net in tutti i miei progetti. Dal momento che non voglio aggiungere la DLL a tutti i progetti, ho creato un progetto "Globals", aggiungo un riferimento a log4net.dll al suo interno e faccio riferimento da tutti gli altri progetti al progetto "Globals".

Tuttavia, non riesco ad accedere alle classi log4net da nessun altro progetto.

using Globals.log4net; 

Sembra non funzionare neanche.

Cosa sto sbagliando?

+1

Come hai esposto log4net dal tuo 'Globals'? – Oded

+0

Come faccio? – Yossale

risposta

3

Se tutto ciò che hai fatto è stato riferimento alla DLL, tutto ciò che hai fatto è stato ottenere un copia della DLL con ogni riferimento al tuo progetto Globals. Non sei ancora utilizzando la libreria.

Quello che normalmente fare sarebbe creare un'interfaccia ILogger, attuarlo utilizzando log4net nel progetto Globals e l'uso che l'attuazione negli altri progetti (più un'implementazione mock per i test).

+1

L'aggiunta di un riferimento indica che l'assemblaggio ora dipende dalla libreria di riferimento, quindi viene copiato in ogni posizione dell'assembly. Tuttavia, l'assembly non esegue _expose_ o _use_ alcuna caratteristica della libreria di riferimento, non sarà possibile utilizzarlo. – Oded

+0

È una buona soluzione, ma in realtà sta creando un wrapper quando non ne ho davvero bisogno/ne voglio uno. – Yossale

+0

Quindi probabilmente è necessario fare riferimento a log4net in tutti i progetti che ne hanno bisogno. Rende la dipendenza chiara ed è probabilmente ciò di cui hai bisogno in ogni caso. Utilizza 'Globals' per codice e funzionalità condivisi. – Oded

0

Questo sistema non funziona. Dovrai aggiungere la dll log4net come riferimento a tutti i progetti. O creare classi proxy, che è molto più lavoro.

0

Leggere sul GAC (Global Assembly Cache), questo un archivio centrale per DLL condivisi tra i progetti ... ecco dove ho inserito la mia DLL log4net. È quindi possibile semplicemente aggiungere il riferimento ad esso nel proprio file .config per il progetto forevery che è necessario utilizzarlo senza aggiungere la DLL ai progetti stessi.

Questo è un buon punto di partenza: MSDN: Working with the Global Assembly Cache

2

Ho paura che non è così che funziona. Devi aggiungere la DLL a tutti i progetti da cui vuoi chiamarlo.

Se si utilizza solo un paio di funzioni nella DLL, è possibile creare funzioni nel progetto Globals per richiamare ad esso.

2

log4net non "vive" in Globali semplicemente per riferimento.

La mia prima inclinazione sarebbe quella di fare in modo che tutti i progetti facciano riferimento a log4net, chiarisce che c'è una dipendenza che non è necessario nascondere in un altro progetto.

Tuttavia, se la logica comune è condivisa tra le classi, è possibile avere una classe "Globale" o "Comune" che include riferimenti a librerie condivise. Per fare riferimento a queste librerie basta aggiungere l'uso dello spazio dei nomi di destinazione.

In altre parole, indipendentemente dal fatto che il riferimento si trovi all'interno dello stesso progetto o di un altro progetto di riferimento, l'istruzione using sarà la stessa.

Per log4net credo che dovrebbe essere solo:

using log4net; 

L'altro modo per aggiungere il riferimento corretto sarebbe quello di digitare uno dei nomi di classe somwhere nel codice (Logger?) E quindi richiamare l'helper menu con "CTRL +". o semplicemente espandendolo, questo avrà la possibilità di aggiungere l'istruzione using corretta.

Problemi correlati