我正在使用 LINQPad 测试代码(我必须说这是一个很棒的产品),但是现在当我尝试将 Thread.CurrentPrincipal 设置为自定义 IPrincipal 时遇到异常,该自定义 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# 程序作为语言)中运行此代码时,出现以下异常
Type is not resolved for member 'UserQuery+MyCustomPrincipal,query_nhxfev, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null'
RuntimeMethodInfo: PluginWindowManager.get_Form ()
如果我删除 Serializable 属性一切正常。这似乎是一个与 LINQPad 使用的 AppDomain 体系结构相关的问题,并且该框架无法找到定义 MyCustomPrincipal 的程序集。另外,我相信将 MyCustomPrincipal 定义到另一个程序集中并将其放入 GAC 可以解决问题,但这不是我的选择。有人有想法吗?
谢谢,马可
编辑:我不知道它是否有帮助,但我在 SqlDependency.Start 上遇到了同样的问题:将 Serializable 放在 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;
}