私はアセンブリを読み込み、アプリケーションが参照する別のアセンブリA1で定義されたクラスC1のサブクラスである型を探します。私はC1のサブクラスであるA1の型Tを定義しましたが、Assembly.Load(...)を使用してA1をロードし、Tのインスタンスでt.IsSubclassOf(typeof(C1))を呼び出すと、falseになります。私は、現在のappdomainにアセンブリA1のインスタンスが2つあり、インスタンスC1からタイプC1を取得しても両方を取得しないと、t.IsSubclassOf(C1)が動作することに気付きました。私はこの行動をかなり理解していない、誰も説明することができますか?さらに、どのようにしてA1や他のアセンブリをロードしてC1のサブタイプを探すかにかかわらず、私のアプリを修正することができますか?Type.IsSubclassOfが期待どおりに動作しない
答えて
CLRが型を一意に識別するために、型識別子にアセンブリ情報が含まれています。あなたの問題は、CLRは、したがって、あなたが効果的に実行され、異なるアセンブリとしてA1の2つのインスタンスを分類していることである。
A1::T1.IsSubClassOf(A1Copy::C1) // No relationship between A1 and A1Copy
...代わりに:アセンブリは一意で識別され
A1::T1.IsSubClassOf(A1::C1)
その名前、バージョン、カルチャ、および公開鍵。 app-domain内の両方のアセンブリインスタンスからこれらの値を確認してください(Assembly.GetName()
経由)。私は、属性の1つに不一致があり、CLRが問題のアセンブリをロードする原因になっていると思われます。
うん、私はちょうどこの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が真、isChild2が偽です。あなたが問題を引き起こしている可能性があります(Assembly.Load()
を使用して)にアセンブリをロードしている
のAppDomain:
いくつかのより多くの光を提供するロードコンテキストのスザンヌ・クックによって、このリンクをチェックアウト。
Assembly.Load()
の代わりにAppDomain.CurrentDomain.Load()
を使用してください。これにより、実際にアセンブリを使用できるCurrentDomainにアセンブリが確実にロードされます。等しくないとして、彼はそれらを取得している理由それは、ロードコンテキストに基づいています
http://blogs.microsoft.co.il/blogs/sasha/archive/2007/03/06/Assembly-Load-Contexts-Subtleties.aspx
私は最初のリンクをたどり、StackOverflowExceptionを取得しました。 –
- 1. Estimoteビーコンが期待どおりに動作していない
- 2. set/pが期待どおりに動作していない
- 3. MySQLが期待どおりに動作していない
- 4. Webdriverwaitが期待どおりに動作していない
- 5. cmd/qが期待どおりに動作していない
- 6. closest()メソッドが期待どおりに動作していない
- 7. メディアクエリが期待どおりに動作しない(隠しクラスブートストラップ)
- 8. Window.openが期待どおりに動作しない
- 9. isValidJSONObjectが期待どおりに動作しない
- 10. jQuery $(ウィンドウ).loadが期待どおりに動作しない
- 11. WSO2 Identity Server:SLOリダイレクトが期待どおりに動作しない
- 12. @BeforeClassが期待どおりに動作しない
- 13. データターゲットが期待どおりに動作しない
- 14. React-routerのactiveClassNameが期待どおりに動作しない
- 15. GLSL 2D Rotation Matrixが期待どおりに動作しない
- 16. tf.reshapeが期待どおりに動作しない
- 17. pandas to_datetimeが期待どおりに動作しない
- 18. Linux bash if - elifが期待どおりに動作しない
- 19. 角4のローダーが期待どおりに動作しない
- 20. TypoScript 'stdWrap.required = 1'が期待どおりに動作しない
- 21. IListの比較が期待どおりに動作しない
- 22. Jqueryネームプスが期待どおりに動作しない
- 23. NSKeyedUnarchiverが期待どおりに動作しない
- 24. Xcodeのオートコンプリートが期待どおりに動作しない
- 25. Pythonのプロパティデコレータが期待どおりに動作しない
- 26. カスタマーリストビューが期待どおりに動作しない
- 27. アトミック整数インクリメントプログラムが期待どおりに動作しない
- 28. CSSグリッドが期待どおりに動作しない
- 29. symfonyのlocateResourceが期待どおりに動作しない
- 30. Elasticsearch [1.5.2] update_by_queryが期待どおりに動作しない
:
は、詳細はこちらの記事をチェックしてください。 http://blogs.microsoft.co.il/blogs/sasha/archive/2007/03/06/Assembly-Load-Contexts-Subtleties.aspx – user7116