2

ASP.NETアプリケーションで実行されるAppDomainに現在ロードされているタイプをループするコードが少しあります。アセンブリを取得する方法は次のとおりです。

var assemblies = AppDomain.CurrentDomain.GetAssemblies();

アプリケーションが最初に起動したときは問題はなく、私が期待するすべてのタイプが存在します。しかし、Web.configを更新するか、w3p.exeプロセスを強制終了すると(または何らかの理由でプロセスがリサイクルされると)、期待しているタイプの一部しか使用できません。デバッガーを使用してステップスルーすると、プライベート検索パス(アプリケーションのbinディレクトリ)からの特定のアセンブリがロードされていないことに気付きます。私は、すべてのアセンブリがアプリケーションの起動時にロードされ、すぐに必要かどうかに関係なく再起動することを前提としていました。ただし、再起動した場合、これらのアセンブリファイルが更新されていない限り、これは発生していないようです。

私が必要としているのは、後で使用するために起動時にタイプ情報を収集することです。ただし、再起動中は型が使用できないため、後で型情報を使用する必要があるときに大混乱を引き起こします。それを念頭に置いて、この欠陥をどのように解決または回避できますか?

4

3 に答える 3

4

アセンブリはオンデマンドでロードされるため、これらのアセンブリに含まれているタイプをまだ使用していない可能性があります。

于 2009-09-09T23:46:47.813 に答える
3

使用できます

AssemblyName[] assemblies = Assembly.GetCallingAssembly().GetReferencedAssemblies();

このようにして、これらのメソッドを呼び出しているアセンブリから参照されているすべてのアセンブリを取得します。

于 2009-09-10T22:41:16.803 に答える
2

スタートアップの一環として、気になるアセンブリを 明示的にロードできますか?

どのアセンブリが必要になるかを事前に知っておく必要があります。

ファイルシステムをスキャンして、アプリと一緒に出荷されたアセンブリを見つけることは有用なアイデアかもしれませんが、GACがロードされたアセンブリには役立ちません...

于 2009-09-10T05:04:44.817 に答える