Включение log4net в веб-приложение .net, созданное с помощью .net 4.0 - PullRequest
2 голосов
/ 27 июля 2010

Я видел, что в Интернете есть много-много сообщений об этом, в том числе и в stackoverflow, но я не нашел способа решить мою проблему. Я попробовал 3 вещи сейчас, и все это не работает:

  1. Я просто попытался получить файл log4net.dll, полученный из zip-папки log4net со всем исходным кодом в каталоге bin. Результаты : Нет ошибок компиляции, но мой SmtpAppender просто не отправляет сообщения об ошибках по электронной почте.
  2. Итак, я нашел в Интернете, что может быть связано с версией, которую log4net.dll компилировал. Что странно, но в любом случае я столкнулся с одной ошибкой, которая просила меня создать надежный ключ для сборки, и это то, что я сделал и скомпилировал, поэтому я выпускаю этот проект, беру log4net.dll и добавляю его в ссылки моего проекта. Результат : Нет ошибки компиляции, но 1 ошибка при попытке выполнить настройку из строки Global.asax:

    protected void Application_Start(object sender, EventArgs e) {
        log4net.Config.XmlConfigurator.Configure();
    }
    

    Вот ошибка: (См. № Ref1)

  3. Итак, опять же, я обнаружил эту ветку у некоего Ахмеда Фуада, который, по моему мнению, отлично работал. Вот нить . Я сделал все, что он говорит, но я все еще сталкиваюсь с той же ошибкой (# Ref1).

Кому-нибудь удалось настроить SmtpAppender в веб-приложение C # VS.net с использованием Framework 4.0?

Ref1

Нарушение правил безопасности наследования при переопределении члена: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Доступность для безопасности метода переопределения должна соответствовать доступности безопасности переопределяемого метода


Дополнительная информация (Отзыв № 1)

Я только что попробовал что-то еще. Я открыл полный .sln приложения log4net, преобразованного с VS.net 2010, добавил веб-проект, выглядящий точно так же, как мое приложение, но в этом случае я могу отладить библиотеку Log4net. Вот где это терпит неудачу:

// If we could not find an alias
if (rep == null)
{
    LogLog.Debug("DefaultRepositorySelector: Creating repository [" + repositoryName + "] using type [" + repositoryType + "]");

    // Call the no arg constructor for the repositoryType
    HERE -> rep = (ILoggerRepository)Activator.CreateInstance(repositoryType); <-- HERE

    [...]
}

Ответы [ 2 ]

5 голосов
/ 27 июля 2010

найди это !!Я прочитал этот пост Log4Net и .NET 4.0 RC , и он просто решил эту проблему!

В моем первом посте (вопрос) на шаге 3 того, что я пробовал, говорится что-то заменить в AssemblyInfo.cs:

Он говорит: «В AssemblyInfo.cs,изменил часть для частичной безопасности, чтобы она выглядела так: "

  (#)if (!NETCF && !NET_4_0)
  //
  // If log4net is strongly named it still allows partially trusted callers
  //
  [assembly: System.Security.AllowPartiallyTrustedCallers]
  (#)endif

Это не хорошо !!Вы должны удалить "! NET_4_0" и заменить [сборку] на эту строку:

  [assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

И SMTPAppender, и FileAppender теперь работают нормально для меня!

4 голосов
/ 30 мая 2012

Вы по-прежнему будете получать это сообщение об ошибке, используя log4net v1.2.11 на веб-сайте с частичным доверием 4.0, например:

<system.web>
    <trust level="Medium" />

Если для частичного доверия нет необходимости, измените его на:

<system.web>
    <trust level="Full" />

останавливает ошибку.

...