2011-06-16 82 views
7

我正在运行一个.NET 4.0 Web应用程序(而不是网站)和PostSharp 1.5。我无法让OnEntry覆盖方法使用OnMethodBoundaryAspect基类来执行。这里是一些相关的代码:PostSharp OnMethodBoundaryAspect OnEntry不执行

public sealed class MonitorAttribute : OnMethodBoundaryAspect { 

    public string[] SomeValue { get; protected set; }   

    public MonitorAttribute (params string[] someValue){ 
     SomeValue = someValue; 
    } 

    public override void OnEntry(MethodExecutionEventArgs eventArgs){ 
     // do Something here 
     base.OnEntry(eventArgs); 
    } 

} 

public sealed class MyUsageClass : IMyUsageClass { 

    [Monitor(new string[]{ 'Test' }) 
    public void SomeMethod { 
     // Do something else in here 
    }   

} 

我是否错过了什么?它从不碰到OnEntry方法。我也尝试用新的2.0版本替换PostSharp.dll和PostSharp.Laos.dll依赖项。如果它有任何区别MyUsageClass由StructureMap实例化。

+0

使用ILSpy(或反射),并检查你的方法编译时间后。你的目标方法应该包含一个try/catch方法,或者至少在方法体顶部调用方面的OnEntry方法。 – 2011-06-16 20:45:05

+0

非常酷。我正在下载ILSpy ....我会尽快回复。谢谢! – a432511 2011-06-16 20:50:44

+0

好的。通过ILSpy查看方法,我没有看到方法体顶部的OnEntry调用。 – a432511 2011-06-16 20:55:19

回答

2

是的,每个开发者都需要安装PostSharp。如果你只是使用初学者版,那么它是免费的。

发布此信息作为向您显示代码的答案。我的测试代码

class Program 
    { 
     [Monitor] 
     static void Main(string[] args) 
     { 

     } 
    } 

    [Serializable] 
    public class MonitorAttribute : OnMethodBoundaryAspect 
    { 
     public override void OnEntry(MethodExecutionArgs args) 
     { 
      Console.WriteLine("OnEntry"); 
     } 
    } 

代码编译之后

internal class Program 
    { 
     [CompilerGenerated, DebuggerNonUserCode] 
     internal sealed class <>z__Aspects 
     { 
      internal static MethodBase m1 = MethodBase.GetMethodFromHandle(ldtoken(Main())); 
      internal static readonly MonitorAttribute a0 = (MonitorAttribute)<>z__AspectsImplementationDetails.aspects1[0]; 
     } 
     private static void Main(string[] args) 
     { 
      Program.<>z__Aspects.a0.OnEntry(null); 
     } 
    } 
+0

好的,我只是通过PostSharps网站上的文档,看起来像我需要在我的机器上完整安装PostSharp。感谢你的帮助! – a432511 2011-06-16 21:05:43