我得到了“;无法序列化方面:类型';log4net.Core.LogImpl';在组装';log4ne
本文关键字:Core log4net LogImpl 类型 log4ne 方面 序列化 | 更新日期: 2023-09-27 18:10:58
环境
- Windows 7 x64
- PostSharp 2.1.7.30已安装
- PostSharp 2.1.7.29(从PostSharp安装目录检索到的引用(
- log4net 1.2.11.0(从log4net二进制文件下载的
net'2.0'release
目录检索到的引用( - ASP.NET 2.0应用程序
- Visual Studio 2010 SP1
方面
[Serializable]
public class MethodBoundaryAspect : PostSharp.Aspects.OnMethodBoundaryAspect
{
ILog _logger = LogManager.GetLogger("MethodBoundaryAspect");
public override void OnEntry(PostSharp.Aspects.MethodExecutionArgs args)
{
_logger.DebugFormat("The user {0} entered the method {1} at {2}.",
HttpContext.Current.Profile.UserName,
args.Method.Name,
DateTime.Now);
base.OnEntry(args);
}
public override void OnExit(PostSharp.Aspects.MethodExecutionArgs args)
{
_logger.DebugFormat("The user {0} exited the method {1} at {2}.",
HttpContext.Current.Profile.UserName,
args.Method.Name,
DateTime.Now);
base.OnExit(args);
}
public override void OnException(PostSharp.Aspects.MethodExecutionArgs args)
{
_logger.DebugFormat("The user {0} was executing the method {1} when an unhandled exception occurred at {2}.{3}{4}",
HttpContext.Current.Profile.UserName,
args.Method.Name,
DateTime.Now,
Environment.NewLine,
args.Exception.ToString());
base.OnException(args);
}
}
编译错误
无法序列化方面:程序集"log4net,Version=1.2.11.0,Culture=neutral,PublicKeyToken=669e0ddf0bb1aa2a"中的类型"log4net.Core.LogImpl"未标记为可序列化。
如何使log4net.Core.LogImpl
可序列化,以便编译此解决方案
根据Grant和mtsiakiris的评论,我通过在字段中添加[NonSerialized]
属性来解决这个问题,如下所示:
[NonSerialized]
ILog _logger = LogManager.GetLogger("MethodBoundaryAspect");
然后在序列化期间忽略它。发生这种情况的原因是PostSharp需要在IL生成过程中序列化属性。