2011-02-02 10 views
2

私のプログラムにX.dllというアセンブリをロードしています。X.dllは何でも構いません。クラスX.A_Classのインスタンスを作成します。しかし、アセンブリXにアセンブリが必要な場合、A,BCDの場合はどうなりますか?
これはどのように検出されますか?
変数に変数を格納しないでロードするにはどうすればよいですか?アセンブリに必要なアセンブリを入手しますか?

+2

CLRは既にこれを検出できます。必要なものだけを読み込みます。あなたは助ける必要はありません。実際に助けることは有害かもしれません。 –

+0

アセンブリをファイルから動的にロードするときは使用しません。 – Vercas

答えて

4

@alexnとしてAssembly.GetReferencedAssembliesを使用してから、Assembly.Loadを使用して読み込むことができます。代わりに、AppDomain.CurrentDomain.AssemblyResolveをフックしてオンデマンドでロードすることもできます。

反復処理が必要な場合は、推移的な依存関係を取得するために再帰的に実行する必要があります。

+0

明らかに、私はアセンブリを読み込む方法を知っていましたが、それらを変数に入れずに作​​業していますか? – Vercas

+0

Assembly.Loadは、それらを現在のAppDomainにロードします.AppDomainからタイプまたはメソッドを使用する場合は、これを実行する必要があります。 –

+0

私は私のコンピュータに着くとすぐにそれを試みます。 – Vercas

2

アセンブリの参照アセンブリは、Assembly.GetReferencedAssembliesメソッドを使用して取得できます。

+0

クールですが、アセンブリに 'X'が変数を保持せずに使用できるように、どうすればロードできますか? – Vercas

+0

正直言って、私は知らない。私はそれと遊ぶ必要があります:) – alexn

+0

よかった。私はVisual Studioをここに持っていれば私もそれを試してみようと思います... – Vercas

0

通常、改訂されたアセンブリは自動的に読み込まれます(リンクの開始についてはHow is an assembly resolved in .NET?などの関連メッセージを参照)。

標準の場所(GACやアプリケーションのルートフォルダなど)からアセンブリを読み込んでいる場合は、参照先のアセンブリをロードするためのセットアップパス(「アセンブリの既定のロードパス」を検索します - つまり、アプリケーション設定ファイル-)他の回答に記載されているようにAssemblyResloveイベントから自分自身をロードしてください。で

ロードアセンブリの問題をデバッグを開始するための最良の方法が読まれるブログ:http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx(および関連記事http://blogs.msdn.com/b/suzcook/archive/tags/loader+debugging+advice/

EDIT:フォルダ - >「ルートフォルダ」+リンク設定ファイルトピックへのパスを探査するため。

+0

私はあなたの答えによって混乱します。私はアプリケーションのフォルダ内のフォルダからアセンブリを動的にロードしています。 – Vercas

+0

それでは、あなたはブログのデバッグに従ってきましたが、CLRがこれを徹底的に探した場所を知りませんでしたか? –

関連する問題