linqpad и пользовательский сериализуемый IPrincipal

Я использую LINQPad для тестирования кода (, какой отличный продукт, должен сказать ), но теперь я сталкиваюсь с исключением, когда пытаюсь установить для Thread.CurrentPrincipal пользовательский IPrincipal, помеченный атрибутом SerializableAttribute. после примера, демонстрирующего проблему

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

Когда я запускаю этот код в LINQPad (C #Program as Language ), я получаю следующее исключение

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

Если я удалю атрибут Serializable, все пойдет нормально. Похоже, проблема связана с архитектурой AppDomain, которую использует LINQPad, и неспособностью платформы найти сборку, определяющую MyCustomPrincipal. Кроме того, я считаю, что определение MyCustomPrincipal в другой сборке и помещение ее в GAC решит проблему, но для меня это не вариант. У кого-нибудь есть идея?

Спасибо, Марко

РЕДАКТИРОВАТЬ:Я не знаю, может ли это помочь,но у меня была та же проблема с SqlDependency.Start :, когда Serializable помещается в IPrincipal, фреймворк выдает ошибку, жалуясь, что не может найти сборку, определяющую тип IPrincipal. Я решил позорным взломом:

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;
}
6
задан mCasamento 14 July 2012 в 08:48
поделиться