2010-02-17 16 views
27

Intenté compilar un proyecto que dependiera del marco de registro de Log4Net usando .NET 4.0 RC y encontré algunos problemas.Log4Net y .NET 4.0 RC

Fuera de la caja (simplemente cambiando el destino a .NET 4.0), ya no funciona, se produce una excepción de seguridad.

normas de seguridad Herencia violados mientras se sobreescriben miembro de: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData (System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Seguridad accesibilidad del método primordial debe coincidir con la accesibilidad de seguridad del método ser

Esto se resolvió mediante la adición de la siguiente línea al conjunto de log4net (en AssemblyInfo.cs):

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

¿Alguien puede explicar por qué es necesario y hay alternativas para hacerlo de esta manera? ¿Esto está relacionado con la forma en que se escribe Log4Net o algo más?

Respuesta

22

Esto es necesario porque .NET 4.0 agregó Level 2 Security-Transparent Code (que es el nuevo valor predeterminado) y eliminó Code Access Security. Level 1 Security-Transparent Code sigue estando allí por compatibilidad, pero, como ha encontrado, tiene que ser especificado.

Tiene razón en que está relacionado con la forma en que se escribe Log4Net. Realmente no hay alternativa a la solución que ha encontrado, salvo actualizar el código Log4Net o cambiar a una solución de registro diferente :)