2010-02-17 15 views
27

Ho provato a compilare un progetto dipendente dal framework di registrazione Log4Net utilizzando .NET 4.0 RC e ho riscontrato alcuni problemi.Log4Net e .NET 4.0 RC

Out of the box (solo cambiando l'obiettivo di NET 4.0), non funziona più, un'eccezione di protezione viene generata.

regole di sicurezza Inheritance violate mentre l'override membro: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. sicurezza l'accessibilità del metodo predominante deve corrispondere l'accessibilità sicurezza del metodo essendo

Questo è stato risolto aggiungendo la seguente riga al gruppo log4net (in AssemblyInfo.cs):

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

Qualcuno può spiegare perché è necessario e ci sono alternative per farlo in questo modo? Questo è legato a come Log4Net è stato scritto o qualcos'altro?

risposta

22

Questo è necessario perché .NET 4.0 ha aggiunto Level 2 Security-Transparent Code (che è il nuovo valore predefinito) e ha eliminato Code Access Security. Level 1 Security-Transparent Code è ancora lì per compatibilità ma, come hai trovato, deve essere specificato.

È corretto che sia correlato alla modalità di scrittura di Log4Net. Non esiste davvero un'alternativa alla soluzione trovata oltre all'aggiornamento del codice Log4Net o passare a una diversa soluzione di registrazione :)