2013-05-27 16 views
8

Mam projekt Wpf .net 4.0 C#, który próbuję przenieść z użycia Log4Net do używania NLog jako biblioteki rejestrowania za fasadą Common.Logging. Spodziewałem się, że to łatwe zadanie, ale wiesz, co mówią, Nic nigdy nie jest łatwe.Wspólne rejestrowanie nie może załadować typu NLog.TargetWithLayout

Użyłem Nuget do:

  • Pobierz nlog w wersji 2.0.1.2.
  • Pobierz Common.Logging.NLog w wersji 2.0.0.
  • Pobierz Common.Logging.NLog20 w wersji 2.1.2.
  • Zaktualizowano wspólne logowanie z wersji 2.0.0 do wersji 2.1.2 przy użyciu NuGet.

W pliku app.config mam:

<common> 
    <logging> 
     <factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog"> 
      <arg key="configType" value="FILE" /> 
      <arg key="configFile" value="~/NLog.config" /> 
     </factoryAdapter> 
    </logging> 
</common> 

... i ...

<dependentAssembly> 
    <assemblyIdentity name="NLog" publicKeyToken="5120e14c03d0593c" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" /> 
    </dependentAssembly> 

Kiedy uruchomić aplikację pojawia się błąd informujący

"Wywołanie konstruktora na typ" NameSpace.Shell.AppBootstrapper ", które pasuje do określonych wiązań wiązania, spowodowało wyjątek." Numer linii "8" i pozycja linii "18".

Wewnętrzna wyjątek:

{ „Nie załadowania jednego lub więcej żądanych typów pobierania właściwości LoaderExceptions więcej informacji..”}

Ta ładowarka wyjątkiem, że jest tylko jeden, to:

{ "nie można załadować typu 'NLog.TargetWithLayout' z zespołem„NLog, Version = 2.0.1.0, CULT ure = neutralny, TokenKluczaPublicznego = 5120e14c03d0593c”. ":" NLog.TargetWithLayout"}

ktoś rozwiązać ten problem lub masz pracę wokół dostać NLog working with Common.Logging?

W interesach dotyczących nie zamieszczania długich pytań nie zamieściłem pliku NLog.config, ale mogę, jeśli byłoby to korzystne.

Odpowiedz

15

Po tym, jak zadałem to pytanie, bardzo dużo się rozglądałem, a ja nawet szukałem, zanim zadałem to pytanie. Zacząłem próbować różnych rzeczy i mieć nadzieję, że mogą one zadziałać.

Co znalazłem, że Common.Logging.NLog.NLogLoggerFactoryAdapter że używałem używał wracał z dll Common.Logging.Nlog dll i że ma refrence do NLog 1.0.0.505 który wykorzystuje starą pozycję dla klasy NLog.TargetWithLayout.

Usunąłem pakiet Common.Logging.Nlog z NuGet i zmieniłem referencję w aplikacji.plik konfiguracyjny do:

<factoryAdapter type="Common.Logging.NLog.NLogLoggerFactoryAdapter, Common.Logging.NLog20"> 

To wtedy używa poprawną klasę, która znajduje się w opakowaniu NLog 2.0.1.2 i pozwala NLog, a aplikacja uruchomi się.

Mam nadzieję, że pomoże to każdemu, kto natknie się na ten problem. Nie mogłem znaleźć nikogo, kto udokumentowałby, jak sobie z tym poradzić.

2

Prawdopodobnie zainstalowałeś pakiet Common.Logging.NLog NuGet zamiast Common.Logging.Nlog20. Sprawdź numer referencyjny nuget, który może być mylony z powodu wersji 2 języka CL i wersji 2 języka NLog. Najwyraźniej masz wersję 2 języka CL, ale NLogLoggerFactoryAdapter dla NLog w wersji 1.

+0

To brzmi poprawnie. To prawie tyle, co powiedziałem w powyższej odpowiedzi. – Klee

+0

Rozumiem, co się dzieje. zobacz tutaj https://github.com/net-commons/common-logging/issues/23#issuecomment-23339522 – skalinkin

Powiązane problemy