1

作成するWebPartの親として機能するWebPartのサブクラスを作成しようとしています。同じプロジェクトで空のクラスを作成すると、期待どおりにそのクラスから継承できます。ただし、別のアセンブリ(参照してクラスを使用できるアセンブリ)に配置しようとすると、次のエラーが発生します。

要求されたタイプの1つ以上をロードできません。詳細については、LoaderExceptionsプロパティを取得してください。

関連する可能性のあるその他の情報(私は通常SharePoint開発者ではありません):dllをコンパイルし、devプロジェクトから参照して、SharePointインスタンスの/binディレクトリにコピーします。アセンブリはすべて署名されています。VS2008の「展開」機能を使用して展開しようとしています。

残念ながら、これはSharePoint固有のエラーではないようであり、問​​題を解決する方法がわかりません。誰かがこれを経験しましたか、そしてあなたは何か提案がありますか?

4

1 に答える 1

1

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 に追加するだけで解決できます。

于 2008-09-16T05:36:36.467 に答える