2011-08-31 14 views
5

ディレクトリ内のDLLからすべてのアセンブリをロードする必要があります。ディレクトリ内のマネージドアセンブリDLLをロードする

私の基本的なコードは次のとおりです。

var assemblies = from filename in Directory.GetFiles(HttpRuntime.BinDirectory, "*.dll") 
       select Assembly.LoadFrom(filename); 

しかし、そのディレクトリ内の管理対象外のDLLがあるならば、Assembly.LoadFromは失敗します。管理されたDLLのみをロードする良い方法はありますか?ロード例外のキャッチはオプションですが、より良い方法があるかどうかを知りたいと思います。

私のコードは、アプリケーションの起動時にASP.NETで実行されます。そこで、ASP.NET固有のソリューションも受け入れます。

+0

ビンを使用する必要がありますか?マネージドdllだけを含む別のディレクトリからロードできますか? – sestocker

+0

はい、このプロジェクトのasp.net 'bin'ディレクトリでなければなりません。 –

答えて

4

http://blogs.msdn.com/b/junfeng/archive/2004/02/06/68334.aspx

指定したファイルは、マネージアセンブリでない場合は、「Assembly.LoadFromはBadImageFormatExceptionがスローされます

この例外は、同様に他の理由のためにスローされる可能性スザンヌは親切に多くを指摘しています。 HResultがCOR_E_ASSEMBLYEXPECTEDの場合、これは管理されたアセンブリではないことを意味します。

これは役に立ちますか?

+0

ありがとうございます、少なくとも、負荷の例外を無視するタイミングについては、私は非常に正確です。基本的には、別の理由で発生するロード例外を呑み込まないようにしたい。 –

+0

これは良い見えます - 自分自身、心を試していない! –

5

Assembly.LoadFromtry...catchブロックに入れてループしてください。ここから

+0

おそらく動作する可能性のある最も単純なことをしてください... –

3

グーグルでは、このページに移動しました:Detect if an assembly is a managed assemblyこのような音はすばらしいフィット感になります。

実際には、管理されていないdllの数と、起動時の機密性の程度によって異なります(私は起動時にこれをやっていると仮定しています)。両方のアカウントでリラックスできるのであれば、try...catchが最も簡単なことですが、そうでない場合は、アセンブリヘッダー情報の読み取りがさらに速くなります。

+0

非常にクール!しかし、私はBadImageFormatExceptionをキャッチし、HResultをチェックするつもりです。なぜなら、ほとんどの場合、アンマネージDLLが存在するとは思わないからです:) –

関連する問題