2010-04-13 12 views
9

Mam problem z log4net, który przez pewien czas mnie dręczył i postanowiłem go posortować.Problem zależności log4net

Mam bibliotekę klas, która odwołuje się do log4net. Jeśli odwołać tej biblioteki klasy w innym projekcie muszę następnie odwołać log4net w tym projekcie, w przeciwnym razie pojawia się błąd budować

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.' 

Jestem świadomy, że komunikat o błędzie jest prawdopodobnie opowiadać mi rozwiązanie, niestety nie mam rozmawiać bełkot ...

Cheers faceci

Alex ..

Odpowiedz

7

Oto link, który opisuje, co się dzieje i jak to naprawić:

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

Fragment z powyższego linku:

Więc co się stało było to, że starał się uzyskać System.Type na pasku, ale rozwiązać typ potrzebuje załadować bazę klasa, która jest w innej bibliotece dll. Kontekst tylko odbicia nie obejmuje strategii wiążącej , więc nie może znaleźć tej biblioteki dll . Wskazówka LoaderException mówi: użyj ReflectionOnlyAssemblyResolve, , która dostarcza więcej informacji na temat tego.

Aby skorzystać z interfejsu API do refleksji, należy rozwiązać wszystkie używane zależności.

+0

Nie, ponieważ ten błąd występuje po dodaniu biblioteki klas do pustego projektu, zanim nawet wykonam jakiekolwiek połączenia do biblioteki klas. –

+0

@Alex DeLarge Połączyłem z artykułem msdn, który wyjaśnia, co się dzieje. – kemiller2002

+1

Dzięki za to, Kevin, przyjmuję tę odpowiedź, ale szukałem więcej, jak konkretnie rozwiązać to z log4net. –

1

Miałem ten sam problem. Nadal nie rozumiem tego w pełni, ale mogę wam powiedzieć, jak rozwiązałem mój problem. Posiadałem test jednostkowy B z odniesieniem do projektu A, który odwołuje się do log4net. Więc dla mnie ten bełkot oznacza, że ​​Visual Studio próbuje utworzyć plik .accessor dla projektu testu jednostkowego, to odzwierciedla projekt A. Oznacza to, że próbuje on wczytać odniesienia do projektu A, ale program ładujący zespołu nie może go znaleźć, ponieważ nie ma log4net w GAC, tylko lokalnie, aby projekt A mógł się odwoływać. W moim przypadku dodanie log4net do mojej DEVPATH (również GAC działał) było rozwiązaniem.

4

Miałem ten sam problem z log4net podczas tworzenia nowego projektu WPF i dodawania odwołania do innego projektu, który odwołuje się do log4net. Rozwiązałem problem, dodając log4net.dll do GAC, stosując następujące instrukcje: http://msdn.microsoft.com/en-us/library/dkkx7f79.aspx

+1

Tak, to zadziała, ale niestety dodanie złożeń do GAC nie zawsze będzie możliwe. –

+0

Miałem dokładnie ten sam problem z log4net i projektem WPF. Log4Net został odwołany w oddzielnym projekcie, bibliotece klas, którą chciałem następnie odwołać w moim projekcie WPF. Użyłem konsoli Package Manager Console do zainstalowania log4net również w projekcie WPF (Install-Package log4net-project My.Wpf.Project) i to rozwiązało problem. –