log4net и .net Framework 4.0 - PullRequest
       43

log4net и .net Framework 4.0

3 голосов
/ 25 мая 2010

У меня были проблемы в log4net, когда я обновил свои решения до .net 4.0, а затем я скачал исходный код и собрал log4net и настроил его на .net 4.0 и использовал его в своих проектах.

Первоначально, когда я ссылался на log4net, который предназначен для времени выполнения 2.0, он соблюдался и запускал приложение, но журнал не работал.

Теперь, когда я запускаю свой проект с log4net, ориентированным на .net 4.0, я получаю сообщение об ошибке "The type initializer for 'Log4NetTest.TestLog' threw an exception."

Есть идеи, как это решить?

Редактировать: это внутреннее исключение:

InnerException: System.TypeLoadException Message=Inheritance security rules violated while overriding member:  
'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'.  
Security accessibility of the overriding method must match the security accessibility of the method being overriden.
  Source=log4net
  TypeName=log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)
  StackTrace:
    at log4net.Repository.Hierarchy.Hierarchy..ctor(ILoggerFactory loggerFactory)
    at log4net.Repository.Hierarchy.Hierarchy..ctor() in C:\src\Repository\Hierarchy\Hierarchy.cs:line 150

Ответы [ 5 ]

4 голосов
/ 06 января 2012

В исходном коде log4net добавьте атрибут [SecurityCritical] к Метод Util.ReadOnlyPropertiesDictionary.GetObjectData и сборка.

Только что скомпилировал исходный код для целевой платформы 4.0 (не для клиента). Исходный код версии 1.2.11 уже содержит этот атрибут, но обязательно используйте «NET_4_0» в качестве аргумента компилятора. В противном случае этот атрибут не будет добавлен.

3 голосов
/ 12 апреля 2011

Я нашел скомпилированную версию профиля клиента log4net для .NET здесь:

http://gosheg.blogspot.com/2011/04/log4net-in-net-40-c-applications-net.html

2 голосов
/ 04 июня 2010

Это сработало для меня:

В исходном коде log4net добавьте атрибут [SecurityCritical] в метод Util.ReadOnlyPropertiesDictionary.GetObjectData и выполните сборку.

Возможно, вам понадобится сделать еще несколько вещей, чтобы собрать его для платформы 4.0.

Смотрите это сообщение:

Странная проблема переопределения с Fluent NHibernate и .NET 4

0 голосов
/ 14 октября 2014

Я исправил это, добавив [сборка: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)] войти в систему AssemblyInfo, но теперь она не регистрируется

0 голосов
/ 12 октября 2014

Я исправил подобную проблему, просто обновив пакет Log4Net из диспетчера пакетов Visual Studio.

Спасибо, Хачатур

...