Log4Net и .NET 4.0 RC
Я попытался скомпилировать проект, зависящий от структуры ведения журнала Log4Net, с помощью .NET 4.0 RC и столкнулся с некоторыми проблемами.
Из коробки (просто изменив цель на .NET 4.0), она больше не работает, генерируется исключение безопасности.
Нарушение правил безопасности наследования в то время как переопределяющий член: "Log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext). Обеспечение доступности метод переопределения должен соответствовать безопасность доступа к методу будучи
Это было разрешено добавлением следующей строки в сборку log4net (в AssemblyInfo.cs):
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
Может кто-нибудь объяснить, почему это требуется, и есть ли альтернативы для этого? Связано ли это с тем, как записывается Log4Net или что-то еще?
Ответы
Ответ 1
Это необходимо, потому что .NET 4.0 добавил уровень безопасности-прозрачный код уровня 2 (который является новым по умолчанию) и покончил с Безопасность доступа к коду. Уровень 1 Security-Transparent Code по-прежнему существует для совместимости, но, как вы нашли, должен быть указан.
Вы правы, что это связано с тем, как записывается Log4Net.
На самом деле нет альтернативы найденному вами решению, кроме как обновить код Log4Net, или переключиться на другое решение для ведения журнала:)
Ответ 2
Эта ошибка называется https://issues.apache.org/jira/browse/LOG4NET-347 и кажется, что она исправлена.