views:

430

answers:

2

Following the advice got on another question of mine, I converted the code there quoted to be used with PostSharp:

Attribute:

[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);
    }
}

Still, I cannot get any result ("Works!" on the console). A breakpoint within the PostSharp attribute reveals that it is never entered.

Any Help? Thanks in advance.

A: 

PostSharp processes the compiled IL binary and adds action you want to the method body decorated with the attribute. The attribute won't do anything by itself. This is how CLR tends to work. It just treats attributes as data, not executable code. Without running PostSharp on the compiled code, you don't get anything special.

Mehrdad Afshari
On the PostSharp tutorial on CodeProject this bit of code it seems to to exacly what I want, only trace.write instead of console.write. it doesn't work for me, anyway, neither with trace.write. http://www.codeproject.com/KB/cs/ps-custom-attributes-1.aspx
pistacchio
Are you running PostSharp on your binary after compilation?
Mehrdad Afshari
nope, within the code
pistacchio
A: 

You do not need to execute the PostSharp command-line utility, but you need to install properly.

The easiest way is to install PostSharp using the installer.

Otherwise, you should edit your project file using a text editor as described in documentation.

Gael Fraiteur