2012-03-22 13 views
32

Ostatnio dodane log4net.dll do naszego obiektu danych. Nasz obiekt danych opiera się doskonale, ale podczas próby budowania czegokolwiek odwołujący nasze dane obiekt, który pojawia się następujący błąd:Jak naprawić błąd "Nie można rozwiązać konfliktu między"?

No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily.

znalazłem następujący thread które pozwoliły mi uzyskać więcej informacji na temat tego problemu.

log4net służy do różnych rzeczy w naszym projekcie. Na przykład, kryształ zainstalował 1.2.9 w GAC. Wiem, że infragictics używa 1.2.10.

Mamy konkretny katalog - nazwijmy go c:\references - gdzie budujemy wszystkie nasze biblioteki DLL i wszystkie nasze aplikacje wykorzystują nasze referencje do naszych wewnętrznych bibliotek dll. Tak więc ustawiłem swoje odniesienie w naszym obiekcie danych na c: \ references \ log4net.dll, który jest w wersji 1.2.11. Co jest dziwne, ponieważ w powyższym komunikacie o błędzie nie widzisz 1.2.11. Do biblioteki dll odwołuje się konkretna wersja: = True & Copy Local: = True. Sprawdziłem katalog kompilacji & 1.2.11 log4net został poprawnie przeniesiony.

Jeśli to pomaga oto niektóre ze szczegółowych komunikatów o błędach:

There was a conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". 
    No way to resolve conflict between "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" and "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905". Choosing "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" arbitrarily. 
     References which depend on "log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" [C:\Windows\assembly\GAC_32\log4net\1.2.10.0__692fbea5521e1304\log4net.dll]. 
      C:\Windows\assembly\GAC_MSIL\CrystalDecisions.Shared\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Shared.dll 

    References which depend on "log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905" [C:\Program Files (x86)\Business Objects\Common\4.0\managed\log4net.dll].   c:\references\DBObjectAdoNet.dll 
      Project file item includes which caused reference "c:\references\DBObjectAdoNet.dll". 

Aktualizacja: Do tej pory jedynym sposobem znalazłem się naprawić ten błąd jest odniesienie log4net w cokolwiek odwołującego DBObjectAdoNet.dll. To naprawdę nie jest użyteczne rozwiązanie dla nas, ponieważ prawie w całym naszym systemie używa tego wszystkiego.

Druga aktualizacja: Próbowałem umieścić log4net w myśleniu GAC, który rozwiązałby problem, ale wciąż nie ma wyjścia.

3rd Update: Nawiązałem połączenie z pomocą techniczną do firmy Microsoft. Chcą, żebym użył Assembly.LoadFrom(), który jestem bardzo, bardzo niezdecydowany, ponieważ wykonujemy ponad 300 000 połączeń w jednej aplikacji i wymagałoby to odbicia dla każdego połączenia, które spowolniłoby trochę.

Dowiedziałem się, że jeśli odinstaluję krystalicznie środowisko uruchomieniowe na moim komputerze, błąd zniknie, co nie ma większego sensu, ponieważ jedyne co robi to, o ile mogę powiedzieć, to usunięcie log4net 1.2.10.0 z GAC w folderze .NET framework 2.0, co nie powinno mieć znaczenia, ponieważ aplikacja jest aplikacją 4 .NET Framework.

+0

"Cytat" dowiedziałem się, że odinstalowałem środowisko wykonawcze kryształów na mojej maszynie '/ quote' - pytanie: ** crystal runtime **? Jakie ** środowisko wykonawcze kryształów **? –

+0

@Robert Crystal 11 x86 dla .Net Framework 4. Myślę, że kiedy miałem problem, to samo stało się również z wersją x64. – coding4fun

+0

Dodałem odwołanie do wersji log4net, którą chciałem do projektu, który nie był w stanie rozwiązać konfliktu, a to rozwiązało problem. –

Odpowiedz

2

Dowiedzieliśmy się, że czas działania kryształu był zdecydowanie problemem. Jeśli odinstalujemy aplikację log4net pod adresem %windir%\assembly zainstalowanego środowiska wykonawczego, komunikat ostrzegawczy zniknie. Co dziwne, jeśli zainstaluję log4net 1.2.10 z witryny log4net do GAC, komunikat ostrzegawczy nie pojawi się ponownie. Jeśli ktokolwiek może to wyjaśnić, dodaj do tego wątku. Crystal podpisała log4net z własnym silnym kluczem nazwy (token klucza publicznego jest inny).

Kluczem do rozwiązania problemu z log4net jest to, że log4net jest projektem typu open source.Co oznacza, że ​​możemy po prostu zbudować bibliotekę dll ze źródła o innej nazwie. Jeszcze go nie wypróbowałem, ale to powinno naprawić problem. Będziemy mieć dodatkowy krok budowania ze źródła za każdym razem, gdy chcemy zaktualizować log4net, ale biorąc pod uwagę, jak dużo zaktualizujemy bibliotekę dll, to nie jest wielka sprawa.

+6

Próbowaliśmy tego podejścia z katastrofalnymi rezultatami. Środowisko CLR z łatwością wczytało oba zespoły, ale nie mogło rozwiązać problemu ILog istniejącego w obu. W rezultacie straciliśmy połowę naszego rejestrowania. –

+0

@BrendaBell Przepraszam, że nie wyszło ci to na dobre. Udało się, ale oczywiście każda konfiguracja będzie inna – coding4fun

14

Otwórz plik projektu (.csproj w języku C# lub .vbproj w VB.NET) w celu edycji.

Upewnij się, że numer log4net to Fully Qualified Type Name, ma HintPath i SpecificVersion=True.

<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> 
    <HintPath>..\references\log4net.dll</HintPath> 
    <SpecificVersion>True</SpecificVersion> 
</Reference> 

Zapisz plik i spróbuj go przebudować.

+1

Dzięki za odpowiedź. Próbowałem to niestety to nie działa: c: \ referencje \ log4net.dll true Fałsz coding4fun

+0

Spróbuj przeciwną drogę, zapewniając żadnej konkretnej wersji: ' false ' – KMoraz

+1

Nope, że nie robi” t działa albo – coding4fun

Powiązane problemy