I tried to compile a project dependent on the Log4Net logging framework using .NET 4.0 RC and ran into some problems.
Out of the box (just changing the target to .NET 4.0), it no longer works, a security exception is thrown.
Inheritance security rules violated
while overriding member:
‘log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo,
System.Runtime.Serialization.StreamingContext)’.
Security accessibility of the
overriding method must match the
security accessibility of the method
being
This was resolved by adding the following line to the log4net assembly(in AssemblyInfo.cs):
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
Can someone explain why this is required and are there alternatives to doing it this way? Is this related to how Log4Net is written or something else?
This is required because .NET 4.0 added Level 2 Security-Transparent Code (which is the new default) and did away with Code Access Security. Level 1 Security-Transparent Code is still there for compatibility but, as you found, has to be specified.
You are correct that it is related to how Log4Net is written.
There really is no alternative to the solution you found other than to update the Log4Net code – or switch to a different logging solution 🙂