2010-05-25 6 views
3

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

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

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

Любая идея, как решить эту проблему?

Edit: это внутреннее исключение:

 
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 
+1

Посмотрите на то, что вложенное исключение - см исключение типа инициализатор, и что поможет вам диагностировать его. –

+0

Джон, я добавил внутреннее исключение в вопросе – Aneef

+0

Привет, I Fixed, добавив [сборочные: System.Security.SecurityRules (System.Security.SecurityRuleSet.Level1)] для log4net AssemblyInfo, но теперь его не лесозаготовки – Aneef

ответ

2

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

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

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

Смотрите этот пост:

Weird override problem with Fluent NHibernate and .NET 4

3

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

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

+0

Спасибо! спасли меня, прочитав все те блоги, объясняющие, как загрузить источник и настроить, как они это сделали, вместо простого добавления «загрузки здесь» вверху страницы :) –

4

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

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

+1

В проекте, который я загрузил с Apache.org, был NET_4_0, определенный только в конфигурации отладки , Пришлось добавить его в Release вручную. – myforums

+1

Я только что добавил NET_4_0 для конфигурации релиза в 1.2.11, и он работает!Спасибо – sergtk

0

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

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

0

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

+0

, добавив это как ответ, поскольку я не мог отметить свой комментарий как ответ – Aneef