2010-02-17 21 views
27

Próbowałem skompilować projekt zależny od struktury logowania Log4Net przy użyciu .NET 4.0 RC i napotkał na pewne problemy.Log4Net i .NET 4.0 RC

Po wyjęciu z pudełka (tylko zmiana celu na .NET 4.0), przestaje działać, zgłoszony wyjątek bezpieczeństwa.

naruszył zasady bezpieczeństwa Dziedziczenie podczas nadrzędnymi użytkownika: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. dostępność Bezpieczeństwo metody nadrzędnego musi pasować dostępności bezpieczeństwa metody będącego

zostało to rozwiązane przez dodanie następującej linii do montażu log4net (w AssemblyInfo.cs):

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

Czy ktoś może wyjaśnić, dlaczego jest to wymagane i czy istnieją alternatywy dla robienia tego w ten sposób? Czy jest to związane z pisaniem Log4Net lub czymś innym?

Odpowiedz

22

Jest to wymagane, ponieważ .NET 4.0 dodał Level 2 Security-Transparent Code (co jest nowym domyślnym) i zlikwidował Code Access Security. Level 1 Security-Transparent Code jest nadal kompatybilny, ale, jak stwierdzono, musi zostać określony.

Masz rację, że jest to związane ze sposobem zapisu Log4Net. Naprawdę nie ma żadnej alternatywy dla znalezionego rozwiązania, oprócz aktualizacji kodu Log4Net - lub przejścia na inne rozwiązanie rejestrowania :)