別のアセンブリで WebPart サブクラスを作成する際のエラー
-
09-06-2019 - |
質問
作成する WebPart の親として機能する WebPart のサブクラスを作成しようとしています。同じプロジェクト内に空のクラスを作成すると、期待どおりにそれを継承できます。ただし、それを別のアセンブリ (クラスを参照して使用できるアセンブリ) に配置しようとすると、次のエラーが発生します。
要求されたタイプを 1 つ以上ロードできません。詳細については、LoaderExceptions プロパティを取得してください。
関連する可能性のあるその他の情報 (私は通常 SharePoint 開発者ではありません):DLL をコンパイルし、開発プロジェクトから参照して、SharePoint インスタンスの /bin ディレクトリにコピーします。アセンブリはすべて署名されています。VS2008の「デプロイ」機能を使用してデプロイしようとしています。
残念ながら、これは SharePoint 固有のエラーではないようで、問題の解決方法がわかりません。誰かこれを経験した人はいますか?何か提案はありますか?
解決
OK、問題が見つかりました。パッケージ化タスクでは何らかの理由でリフレクションが使用されます。クラスが別のドメインのクラスから継承していることが判明すると、リフレクションを使用してそのクラスをロードしようとします。ただし、リフレクションではポリシーのバインドが行われないため、そのドメインは読み込まれません。
パッケージ化プログラムの作成者は、次のコードを追加することでこの問題を解決できます。
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
Assembly a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(filename);
static Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}
ただし、プロジェクトのソリューションが必要な場合は、アセンブリを GAC に追加するだけで解決できます。
所属していません StackOverflow