Mamy projekt asp.net 4.0, który używa kilku struktur, który jest zależny od log4net w wersji 1.2.10.0. Dzisiaj próbowałem dołączyć nowy framework, który jest zależny od log4net w wersji 1.2.11.0, utknąłem od tego czasu:
log4net 1.2.10.0 ma publickeytoken = 1b44e1d426115821
log4net 1.2.11.0 ma publickeytoken = 669e0ddf0bb1aa2a
Ponieważ są one różne, nie mogę używać ani przekierowań do zestawu (aby wszystkie frameworki korzystały z tej samej wersji log4net), ani bazy kodu (aby mieć tylko nową wersję frameworka w wersji 1.2.11.0) za pośrednictwem elementu wykonawczego w pliku web.config.
Jakie mam opcje tutaj?
(i dlaczego sygnał dźwiękowy log4net ciągle zmienia publickeytokens między wersjami, jak rozumiem, zgubiony klucz był przyczyną przełączenia między wersjami 1.2.9.0 i 1.2.10.0, czy znowu zgubili klucz? Zgłoszę moją skrzynkę referencyjną aby był bezpieczny, gdyby tego potrzebowali ...)
Edycja: Ok, więc faceci z log4net najwyraźniej wpadli na pomysł, że wydanie z dwoma kluczami było dobrym pomysłem, ale oznacza to, że każdy framework, którego używasz, musi uzgodnić, który z dwóch preferuje, lub te ramy nie mogą działać po stronie obok siebie w tej samej domenie aplikacji. Czy tylko ja uważam, że to okropny pomysł? gdyby wszyscy to zrobili, wszystko by się zepsuło, prawda?
Edit2: Jak powiedziałem, nie używam log4net w moim kodzie biznesowym, ale używam kilku frameworków, które zależą od 1.2.10.0, a problem pojawił się, gdy próbowałem użyć nowego frameworka, który zależał od 1.2.11.0 (nowy klucz ), więc odpowiedź Stefansa nie ma zastosowania, ponieważ nowy framework będzie oczekiwał nowego klucza, a nie starego
źródło
Odpowiedzi:
W ten sposób wszystko działa z wersją 1.2.11.0.
źródło
Method not found: 'Void log4net.Config.BasicConfigurator.Configure()'
Używam najnowszej wersji log4net, którą pobrałem za pośrednictwem nuget. Jednak jedna z bibliotek, których używam, wymaga starej wersji. Moje kłopoty doprowadziły mnie do tego pytania.
Problem z innymi odpowiedziami polega na tym, że używają one tej samej wersji dll dla wszystkich powiązań. Chcę używać funkcji w nowej wersji do wszystkiego innego oprócz starszej zależności.
Aby to zrobić, musisz wykonać następujące czynności:
log4net.1.2.10.dll
. Uwzględnij go w swoim projekcie startowym z akcją Kompiluj ustawioną naNone
i „Kopiuj, jeśli nowsza”App.config
href
Atrybuty identyfikuje gdzie stara wersja jest. Dlatego wszystkie inne żądania dotyczące log4net będą wskazywać na nową wersję.źródło
Możesz pobrać wersję log4net 1.2.11.0, która jest podpisana starym kluczem. Powód, dla którego zmieniono klucz na nowy, wyjaśniono w ich FAQ:
http://logging.apache.org/log4net/release/faq.html#two-snks
(Zasadniczo nowy klucz jest publicznie dostępny iz jakiegoś powodu nie chcieli uwzględniać starego klucza w dystrybucji. Nie jest dla mnie jasne, dlaczego nie udostępnili starego klucza publicznie)
źródło
Nie wiem, czy jest to odpowiednie dla twojego konkretnego przypadku, czy nie, ale możesz przekompilować jeden z frameworków, aby używał log4net z tym samym kluczem publicznym. W moim przypadku był to FluentNHibernate, który używa log4net 1.2.10 i Combres z log4net 1.2.11 z nowym kluczem. Ściągnąłem log4net 1.2.11 podpisany starym kluczem i ponownie skompilowałem z nim Combress. Następnie dodane powiązanie zestawu przekierowuje z 1.2.10 na 1.2.11 i zaczyna działać.
źródło
To niekoniecznie zadziała we wszystkich przypadkach, ale ponieważ projekt korzystający z log4net był OSS, pobrałem źródło, zastąpiłem sprzeczną wersję log4net wersją, z której korzystałem i przebudowałem projekt. W moim przypadku był to Topshelf, więc mam teraz wersję zespołu Topshelf, która została zbudowana z tą samą wersją log4net, której używam i teraz mogę odwoływać się do obu bez problemu.
źródło
Próbowałem przejść do linków podanych powyżej, ale wygląda na to, że wszystkie linki w witrynie Apache nie działają. Oto, co zrobiłem, aby rozwiązać problem:
W programie Visual Studio użyj narzędzia Nuget, aby pobrać i zainstalować najnowszą wersję log4net (1.2.13.0). Menedżer pakietów NuGet automatycznie pobierze i zaktualizuje cały log4net (1.2.11.0) do najnowszej wersji.
źródło