linqpad and custom IPrincipal serializable

Viewed 750

I'm using LINQPad to test code (what a great product, I must say) but now I'm encountering an exception when I try to set the Thread.CurrentPrincipal to a custom IPrincipal that is marked with the SerializableAttribute following a sample that demonstrate the problem

void Main()
{
    Thread.CurrentPrincipal = new MyCustomPrincipal();
}

// Define other methods and classes here
[Serializable]
public class MyCustomPrincipal : IPrincipal
{
    public bool IsInRole(string role)
    {
        return true;
    }

    public IIdentity Identity 
    { 
        get
        {
            return new WindowsIdentity("RECUPERA\\m.casamento");
        }
    }
}

When I run this code in LINQPad (C# Program as Language) I get the following exception

Type is not resolved for member 'UserQuery+MyCustomPrincipal,query_nhxfev, Version=0.0.0.0, 
Culture=neutral, PublicKeyToken=null' 
RuntimeMethodInfo: PluginWindowManager.get_Form ()

If I remove the Serializable attribute everything goes fine. It seems a problem related with the AppDomain architecture that LINQPad uses and the inability of the framework to find the assembly that define the MyCustomPrincipal. Also, I believe that defining MyCustomPrincipal into another assembly and putting it into the GAC would solve the problem, but that's not an option for me. Anyone have an idea ?

Thanks, Marco

EDIT: I don't know if it could help, but I've had the same problem with SqlDependency.Start: putting Serializable on IPrincipal made the framework to throw an error complaining that it can't find the assembly that define the type of IPrincipal. I've solved with an ignominious hack:

System.Security.Principal.IPrincipal principal;
principal = System.Threading.Thread.CurrentPrincipal;

System.Threading.Thread.CurrentPrincipal = null;
try
{
    SqlDependency.Start(connectionString);
        m_SqlDependencyStarted = true;
}
catch (Exception ex)
{
    throw (ex);
}
finally
{
    System.Threading.Thread.CurrentPrincipal = principal;
}
3 Answers
Related