4

アセンブリをロードし、アプリケーションが参照する別のアセンブリ A1 で定義されたクラス C1 のサブクラスである型を検索するアプリケーションがあります。C1 のサブクラスである A1 に型 T を定義しましたが、Assembly.Load(...) を使用して A1 をロードすると、TI のインスタンスで t.IsSubclassOf(typeof(C1)) を呼び出すと false になります。現在の appdomain にアセンブリ A1 の 2 つのインスタンスがあり、両方ではなく一方のインスタンスから型 C1 を取得すると t.IsSubclassOf(C1) が機能することに気付きました。私はこの動作をよく理解していません。誰か説明できますか? さらに、C1のサブタイプを探すためにA1または他のアセンブリをロードするかどうかにかかわらず、これが機能するようにアプリを修正するにはどうすればよいですか?

4

3 に答える 3

2

ええ、私はこれを使って2つのプロジェクトを構築しました。私は、1つのプロジェクトの親クラスと子クラスで定義しました。

namespace ClassLibrary1
{
    public class Parent
    {
        public string name;
    }

    public class Child : Parent
    {
    }
}

次に、情報を読み込もうとしました。

 {
        Type parent = typeof(Parent);
        Type c1 = typeof(Child);
        bool isChild1  = (c1.IsSubclassOf(parent).ToString());

        Assembly a = Assembly.Load(File.ReadAllBytes("ClassLibrary1.dll"));
        Type c2 = a.GetType(c1.FullName);
        bool isChild2 = (c2.IsSubclassOf(parent).ToString());
    }

そして、isChild1がtrueで、isChild2がfalseになりました。

コンテキストのロードに関するSuzanneCookによるこのリンクをチェックすると、さらにいくつかの光が得られました。

http://blogs.msdn.com/suzcook/archive/2003/06/13/57180.aspx

于 2009-07-16T20:15:34.280 に答える
0

アセンブリを (を使用して) ロードしている AppDomain がAssembly.Load()問題を引き起こしている可能性があります。

を使用する代わりに、 をAssembly.Load()使用してAppDomain.CurrentDomain.Load()ください。これにより、アセンブリが実際に使用できる CurrentDomain に確実に読み込まれます。

詳細については、次の記事をご覧ください。

http://blogs.microsoft.co.il/blogs/sasha/archive/2007/03/06/Assembly-Load-Contexts-Subtleties.aspx

于 2011-04-14T22:57:33.537 に答える