Я использую 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;
}