Postsharp:它是如何工作的?

pis*_*hio 4 c# reflection attributes postsharp

根据我的另一个问题的建议,我转换了引用与PostSharp一起使用的代码:

属性:

[Serializable]
public sealed class InitAttribute : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    {
        Console.Write("Works!");
    }
}


static class Logger
{
    public static string _severity;

    public static void Init(string severity)
    {
        _severity = severity;
    }

    [Init()]
    public static void p()
    {
        Console.WriteLine(_severity);
    }
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,我无法获得任何结果(控制台上的"Works!").PostSharp属性中的断点显示永远不会输入.

任何帮助?提前致谢.

Meh*_*ari 10

PostSharp处理已编译的IL二进制文件,并将您想要的操作添加到使用该属性修饰的方法.该属性本身不会做任何事情.这就是CLR的工作方式.它只是将属性视为数据,而不是可执行代码.如果不在编译的代码上运行PostSharp,就不会有任何特殊之处.