LINQPadを使用してコードをテストしています(素晴らしい製品です、言わなければなりません)が、Thread.CurrentPrincipalを、デモのサンプルに続いてSerializableAttributeでマークされたカスタムIPrincipalに設定しようとすると、例外が発生します。問題
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で同じ問題が発生しました:IPrincipalに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;
}