Używam NHibernate 2.1.2.400, który odwołuje się do log4net 1.2.10.0. W tym samym projekcie używam również prostego zestawu SDK do księgowania, niestety nadal używa on log4net 1.2.9.0.
Mogę więc uruchomić NHibernate, jeśli odwołam się do log4net 1.2.10.0, ale SimplySDK nie działa. I wzajemnie...
Domyślam się, że większość problemów wynika z faktu, że log4net zmienił swój klucz asemblera. Próbowałem użyć przekierowania powiązania bez powodzenia: 2 biblioteki DLL nie mają tego samego klucza.
Zastanawiam się nad przekompilowaniem NHibernate do korzystania z log4net 1.2.9.0, ale wydaje mi się, że to niewłaściwa rzecz i czuję, że Simply Accounting nie zaktualizuje swojego SDK do korzystania z log4net 1.2.10.0 w najbliższym czasie.
Jak najlepiej sobie z tym poradzić? Czy w ogóle można to rozwiązać?
źródło
href
wydaje się, że atrybut załatwia sprawę. Dziękuję za zwrócenie uwagi!Odpowiedzi:
Znalazłem rozwiązanie, używając tej odpowiedzi na podobne pytanie
Tworzysz 2 foldery w swoim projekcie, po jednym dla każdej wersji log4net. Umieść każdy plik log4net.dll w odpowiednim folderze, dodając plik do rozwiązania (nie z dodawaniem odwołania). Możesz ustawić właściwość copy to output directory na kopiowanie zawsze, tak aby była automatycznie kopiowana do folderu wyjściowego podczas kompilacji.
Następnie modyfikujesz plik app.config, dodając coś takiego:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="681549d62126b7b8" /> <codeBase version="1.2.9.0" href="log4netv1.2.9.0\log4net.dll" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" /> <codeBase version="1.2.10.0" href="log4netv1.2.10.0\log4net.dll" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" /> <codeBase version="1.2.11.0" href="log4net.dll" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
możesz uzyskać token klucza publicznego zestawu za pomocą sn -T [nazwa_zestawu]
źródło
Możesz dodać wykluczenie do rejestru. Po prostu dodaj te klucze:
Spowoduje to pominięcie sprawdzania poprawności przez środowisko uruchomieniowe .NET dla wymienionych zestawów. W teorii jest to kwestia bezpieczeństwa, ale ponieważ klucz prywatny i tak jest otwarty, nie ma prawie żadnego wpływu.
źródło
Jeśli przekierowanie powiązań nie działa, a prosty księgowy SDK jest zamkniętym źródłem, możliwym rozwiązaniem jest ponowna kompilacja NHibernate, aby używał log4net 1.2.9.0.
źródło