【发布时间】:2011-09-16 17:03:51
【问题描述】:
我正在运行 .NET 4.0 Web 应用程序(不是网站)和 PostSharp 1.5。我无法使用 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 实例化。
【问题讨论】:
-
使用 ILSpy(或反射器)并在编译后检查您的方法。你的目标方法应该有一个 try/catch 包裹它,或者至少,在方法体的最顶部调用方面的 OnEntry 方法。
-
非常酷。我现在正在下载 ILSpy.... 我会尽快回复。谢谢!
-
好的。通过 ILSpy 查看方法,在方法主体的顶部没有看到对 OnEntry 的调用。
-
那么我不太确定这方面是否已应用于您的方法。我会删除所有 postsharp isntlalations,下载最新的 postsharp,安装并重新引用它们,然后再试一次。你需要 1.5 是有原因的(也许是许可?)
-
不,我继承了这个代码库,并且 PostSharp 已经被使用(显然不正确)。开发机器是否需要运行某种额外的插件/安装 postsharp 才能正确编译?