根据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属性中的断点显示它永远不会输入。
任何帮助?提前谢谢。
答案 0 :(得分:10)
PostSharp处理已编译的IL二进制文件,并将您想要的操作添加到用该属性修饰的方法 body 。该属性本身不会做任何事情。这就是CLR的工作方式。它只将属性视为 data ,而不是可执行代码。没有running PostSharp on the compiled code,你就没有什么特别的了。
答案 1 :(得分:3)
您不需要执行PostSharp命令行实用程序,但需要正确安装。
最简单的方法是使用安装程序安装PostSharp。
否则,您应该使用文本编辑器as described in documentation编辑项目文件。