Postsharp:它是如何工作的?

时间:2009-07-22 13:19:26

标签: c# reflection attributes postsharp

根据another question of mine上的建议,我将引用的代码转换为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);
    }
}

但是,我无法获得任何结果(“工作!”在控制台上)。 PostSharp属性中的断点显示它永远不会输入。

任何帮助?提前谢谢。

2 个答案:

答案 0 :(得分:10)

PostSharp处理已编译的IL二进制文件,并将您想要的操作添加到用该属性修饰的方法 body 。该属性本身不会做任何事情。这就是CLR的工作方式。它只将属性视为 data ,而不是可执行代码。没有running PostSharp on the compiled code,你就没有什么特别的了。

答案 1 :(得分:3)

您不需要执行PostSharp命令行实用程序,但需要正确安装。

最简单的方法是使用安装程序安装PostSharp。

否则,您应该使用文本编辑器as described in documentation编辑项目文件。