C# MethodExecutionEventArgs.Method在多个web服务项目中使用PostSharp时出现空引用异常

C# MethodExecutionEventArgs.Method在多个web服务项目中使用PostSharp时出现空引用异常,c#,asp.net,logging,web-services,postsharp,C#,Asp.net,Logging,Web Services,Postsharp,我正在使用PostSharp记录应用程序集中每个方法的入口和出口。此程序集在GAC中具有强名称、版本和注册 然后,它由托管在IIS内单独虚拟目录中的两个web服务项目共享。当拦截器的OnEntry/OnExit方法由WebServiceProject1调用时,它可以正常工作,但是当它们随后由WebServiceProject2调用时,传递到拦截器的MethodExecutionEventArgs.method值似乎为null,我得到一个NullReferenceException 如果重新启动I

我正在使用PostSharp记录应用程序集中每个方法的入口和出口。此程序集在GAC中具有强名称、版本和注册

然后,它由托管在IIS内单独虚拟目录中的两个web服务项目共享。当拦截器的OnEntry/OnExit方法由WebServiceProject1调用时,它可以正常工作,但是当它们随后由WebServiceProject2调用时,传递到拦截器的MethodExecutionEventArgs.method值似乎为null,我得到一个NullReferenceException

如果重新启动IIS并按照WebServiceProject2、WebServiceProject1的顺序调用web服务项目,那么第一个调用的项目仍然有效,另一个以相同的方式抛出NullReferenceException。代码如下所示:

[Serializable]
[Log(AttributeExclude = true)]
[AttributeUsage(AttributeTargets.All)]
public sealed class LogAttribute : OnMethodBoundaryAspect
{
  public override void OnEntry(MethodExecutionEventArgs eventArgs)
  {
    IoC.Resolve<ILogger>().WriteMethodEntry(eventArgs.Method, eventArgs.GetReadOnlyArgumentArray());
  }

  public override void OnExit(MethodExecutionEventArgs eventArgs)
  {
    IoC.Resolve<ILogger>().WriteMethodExit(eventArgs.Method, eventArgs.ReturnValue);
  }
}
有趣的是,如果我从GAC中删除程序集,并使webservice项目从\bin子目录副本中运行,它就可以正常工作。但是,我不想这样做,因为应用程序的另一部分依赖于GAC中的程序集,并且我不希望同一DLL在不同的位置有很多不同的版本

这与这里描述的问题类似:但有明显的区别


今天我将尝试构建一个独立的应用程序来证明这一点。

您能将此问题报告给我吗

请注意,当要处理的程序集位于GAC中时,存在已知问题。如果在PostSharp处理程序集时程序集具有相同的版本号,则该程序集即使是旧版本也不能位于GAC中。您应该在预构建步骤中将其删除


但是,如果PostSharp运行正常,我看不出该方法没有通过的原因。你试过在Reflector中看到发生了什么吗?

我在Postsharp论坛上提出了这个问题,并附上了一个简单的例子。我将把它添加到追踪器中。我已经将问题添加到螳螂-ID0000415中。谢谢你的帮助。如果有什么我能帮忙的,请告诉我。。。