You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by Michele Lepri <mi...@gmail.com> on 2012/06/26 19:00:26 UTC
Log4net not working in an ASP.Net environment with medium trust
Hello all,
as you know, .net 4 security policy are changed and are a lot more strict.
First of all, I'm not an expert about .net 4 security =) and I never
developed web apps for medium trust: this is my fist time.
The problem is simple: log4net don't works in medium trust.
the exception is thrown by the [SecurityCritical] Attribute of the
System.Reflection.TargetInvocationException: Exception has been thrown
"GetObjectData" method of ReadOnlyPropertiesDictionary class.
by the target of an invocation. ---> System.TypeLoadException:
Inheritance security rules violated while overriding member:
'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtim
e.Serialization.SerializationInfo,
System.Runtime.Serialization.StreamingContext)'. Security
accessibility of the overriding method must match the security
accessibility of the method being overriden.
at log4net.Repository.Hierarchy.Hierarchy..ctor(ILoggerFactory
loggerFactory)
at log4net.Repository.Hierarchy.Hierarchy..ctor()
--- End of inner exception stack trace ---
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type,
Boolean publicOnly, Boolean noCheck, Boolean& canBeCached,
RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,
Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,
Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at log4net.Core.DefaultRepositorySelector.CreateRepository(String
repositoryName, Type repositoryType)
at log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly
repositoryAssembly, Type repositoryType, String repositoryName,
Boolean
readAssemblyAttributes)
at log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly
repositoryAssembly, Type repositoryType)
at log4net.Core.DefaultRepositorySelector.GetRepository(Assembly
repositoryAssembly)
at log4net.Core.LoggerManager.GetRepository(Assembly repositoryAssembly)
at log4net.Config.XmlConfigurator.Configure()
[CUT]
According to this:
http://msdn.microsoft.com/en-us/library/bb924412.aspx
Serialization in a partially-trusted application should be done in
another way ([DataContract] attribute must used, you can't use
[Serializable] attribute and can't use ISerializable interface to
control the serialization process.
I patch log4net in a insane way, but it works now: after removed the
[Serializable] and the ISerializable interface all work fine, but of
course i "lose" all the code performed by the implementation of the
ISerializable interface.
By the way the log is fine for me now and all I need seem to work.
To be really onest, i don't know what I should loose doing a thing like
that..
Other library (like Ninject) provide a separate build for medium trust
environment and it works great.
I think would be really great to have a version like that for log4net.
Tell me what do you think about it, how I could help and if I should
fill a jira issue.
Thanks and best regards
michele
--
http://michelelepri.blogspot.com/
Re: Log4net not working in an ASP.Net environment with medium trust
Posted by George Chung <ge...@glympse.com>.
If your administrator allows, you could install log4net into the GAC and it
would be fully trusted.
On Tue, Jun 26, 2012 at 10:00 AM, Michele Lepri <mi...@gmail.com>wrote:
> Hello all,
>
> as you know, .net 4 security policy are changed and are a lot more strict.
>
> First of all, I'm not an expert about .net 4 security =) and I never
> developed web apps for medium trust: this is my fist time.
>
> The problem is simple: log4net don't works in medium trust.
>
> the exception is thrown by the [SecurityCritical] Attribute of the
>
> System.Reflection.TargetInvocationException: Exception has been thrown
> "GetObjectData" method of ReadOnlyPropertiesDictionary class.
>
>
> by the target of an invocation. ---> System.TypeLoadException:
> Inheritance security rules violated while overriding member:
> 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtim
> e.Serialization.SerializationInfo,
> System.Runtime.Serialization.StreamingContext)'. Security
> accessibility of the overriding method must match the security
> accessibility of the method being overriden.
> at log4net.Repository.Hierarchy.Hierarchy..ctor(ILoggerFactory
> loggerFactory)
> at log4net.Repository.Hierarchy.Hierarchy..ctor()
> --- End of inner exception stack trace ---
> at System.RuntimeTypeHandle.CreateInstance(RuntimeType type,
> Boolean publicOnly, Boolean noCheck, Boolean& canBeCached,
> RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
> at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,
> Boolean skipCheckThis, Boolean fillCache)
> at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,
> Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
> at System.Activator.CreateInstance(Type type, Boolean nonPublic)
> at log4net.Core.DefaultRepositorySelector.CreateRepository(String
> repositoryName, Type repositoryType)
> at log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly
> repositoryAssembly, Type repositoryType, String repositoryName,
> Boolean
> readAssemblyAttributes)
> at log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly
> repositoryAssembly, Type repositoryType)
> at log4net.Core.DefaultRepositorySelector.GetRepository(Assembly
> repositoryAssembly)
> at log4net.Core.LoggerManager.GetRepository(Assembly repositoryAssembly)
> at log4net.Config.XmlConfigurator.Configure()
> [CUT]
>
>
> According to this:
> http://msdn.microsoft.com/en-us/library/bb924412.aspx
>
> Serialization in a partially-trusted application should be done in
> another way ([DataContract] attribute must used, you can't use
> [Serializable] attribute and can't use ISerializable interface to
> control the serialization process.
>
> I patch log4net in a insane way, but it works now: after removed the
> [Serializable] and the ISerializable interface all work fine, but of
> course i "lose" all the code performed by the implementation of the
> ISerializable interface.
> By the way the log is fine for me now and all I need seem to work.
> To be really onest, i don't know what I should loose doing a thing like
> that..
>
>
> Other library (like Ninject) provide a separate build for medium trust
> environment and it works great.
>
> I think would be really great to have a version like that for log4net.
>
>
> Tell me what do you think about it, how I could help and if I should
> fill a jira issue.
>
>
> Thanks and best regards
> michele
>
> --
> http://michelelepri.blogspot.com/
>
>