2

创建了一个简单的类来测试 PostSharp 中的 OnExceptionAspect。

[Serializable]
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class ExceptionSwallower : OnExceptionAspect
{
    public override void OnException(MethodExecutionEventArgs eventArgs)
    {
        eventArgs.FlowBehavior = FlowBehavior.Return; 
        base.OnException(eventArgs);  
    }
}

将属性添加到方法

    [ExceptionSwallower]
    public void SomeMethod()
    {
        throw new Exception();
    }

并调用它。

然而,异常并没有真正被吞掉,这看起来很奇怪。

我还没有找到任何类似的问题,所以我希望有一些小事情我没有做对。任何人?

4

2 回答 2

3

您可以检查构建输出:它可以给出一些提示是否涉及后处理,例如 POSTSHARP:postsharp 警告 PS0131:模块“YourAssembly.dll”不包含任何方面或其他转换。为了提高构建时性能,请考虑通过在项目中设置编译符号(又名常量)“SkipPostSharp”或设置 MSBuild 属性“SkipPostSharp=True”来禁用此模块的 PostSharp。: 消息 : PostSharp 完成 -- 0 个错误,1 个警告,在 1637 毫秒内送达

于 2011-12-09T21:26:34.163 回答
0

有时,使用 Reflector 查看生成的程序集会有所帮助。PostSharp 生成普通的 .NET 程序集,没有魔法。

于 2009-07-24T18:51:55.067 回答