2010-04-13 7 views
9

Ho un problema con log4net che mi ha infastidito da un po 'e ho deciso di ordinarlo.problema di dipendenza log4net

Ho una libreria di classi che fa riferimento a log4net. Se io fare riferimento a questa libreria di classi in un altro progetto devo quindi fare riferimento a log4net in questo progetto altrimenti ottengo un errore di generazione

Unknown build error, 'Cannot resolve dependency to assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' 

Sono consapevole del fatto che il messaggio di errore è probabilmente mi dicendo la soluzione, purtroppo non lo faccio parlare senza senso ...

Ciao ragazzi

Alex ..

risposta

7

Ecco il link che descrive ciò che sta accadendo e come risolvere il problema:

http://blogs.msdn.com/jmstall/archive/2006/11/22/reflection-type-load-exception.aspx

Un estratto dal link qui sopra:

Allora cosa è successo è stato che ha cercato di ottenere il System.Type per Bar, ma per risolvere il tipo di cui ha bisogno per caricare la base classe, che è in un'altra DLL. Il contesto di sola riflessione non esegue la politica di associazione in modo che non possa trovare quella dll . L'hint LoaderException dice a utilizza il ReflectionOnlyAssemblyResolve, che fornisce ulteriori informazioni su .

Per utilizzare l'API di riflessione, è necessario risolvere tutte le dipendenze utilizzate.

+0

No, perché questo errore si verifica quando aggiungo la mia libreria di classi a un progetto vuoto, prima ancora di effettuare chiamate nella libreria di classi. –

+0

@Alex DeLarge Ho collegato a un articolo di msdn che spiega cosa sta succedendo. – kemiller2002

+1

Grazie per questo Kevin, accetterò questa risposta, ma ho cercato di capire come risolvere specificamente questo con log4net. –

1

Ho avuto lo stesso problema. Ancora non lo capisco completamente, ma posso dirti come ho risolto il mio problema. Ho avuto un progetto di test unitario B con un riferimento al progetto A, che fa riferimento a log4net. Quindi, per me, il linguaggio senza senso significa che quando Visual Studio sta cercando di creare il file .accessor per il progetto di test dell'unità, riflette sul progetto A. Ciò significa che tenta di caricare i riferimenti del progetto A, ma il caricatore di assiemi non riesce a trovarlo perché non avere log4net nel GAC, solo localmente per il progetto A come riferimento. Nel mio caso, aggiungere la log4net al mio DEVPATH (anche GAC avrebbe funzionato) era la soluzione.

4

Ho avuto lo stesso problema con log4net durante la creazione di un nuovo progetto WPF e l'aggiunta di un riferimento a un altro progetto che faceva riferimento a log4net. Ho risolto il problema aggiungendo log4net.dll al GAC utilizzando queste istruzioni: http://msdn.microsoft.com/en-us/library/dkkx7f79.aspx

+1

Sì, funzionerà, ma sfortunatamente l'aggiunta di assembly al GAC non sarà sempre possibile. –

+0

Ho avuto lo stesso identico problema con log4net e un progetto WPF. Log4Net è stato referenziato in un progetto separato, una libreria di classi, che ho poi voluto fare riferimento nel mio progetto WPF. Ho usato la console di Gestione pacchetti per installare log4net anche nel progetto WPF (Install-Package log4net -project My.Wpf.Project) e questo ha risolto il problema. –