2011-01-07 4 views
2

アセンブリがありますアセンブリを使用しています。サードパーティのDLLを参照するCOMPlusAssemblyを呼び出します。 COMPlusAssemblyはCOM +でホストされ、System.Enterprises.RegistrationHelperを使用してインストールされます。当社のクライアントは、COMPLusAssemblyで参照されている第三者ソフトウェアをインストールすることも、インストールしないこともあります。 .NET 3.5では、RegistrationHelperを使用してCOMPlusAssemblyをインストールすると、サードパーティ製のDLLをロードしようとすることさえありませんでした。 .NET 4.0にアップグレードしたので、アセンブリをロードしていて、FileLoadExceptionをスローすると、ファイルやアセンブリ、または依存関係のいずれかをロードできませんでした。 .NET 4.0で何か変更があり、.NET 3.5にロードされていない追加の依存関係をロードさせました。当社の第三者アセンブリは、.NET 2.0アセンブリです。依存関係を読み込まないようにフレームワークに指示する方法はありますか?NET 4.0 COM +でアセンブリをインストールする余分な依存関係を読み込む

ありがとうございます!

-Tammy

答えて

0

は、私は本当に正確な答えを持っていない、まだ(それが進化する可能性がありますが)、しかし、私はいくつかのポインタを持っています。

私が知る限り、依存関係はJITterによって要求されるまで(.Net 4.0ではまだ)ロードされません。恐らく何らかの形で、以前に遅延されたコードパスが今や熱心にJITされ、依存関係がロードしようとしました。

おそらく、これを処理する最も良い方法は、依存関係を必要とするコードパスがJITされる前に、AppDomain.Loadを使用して、依存関係の読み込みと解決を手動で引き継ぐことです。ロードが成功したかどうかを判断し、失敗した場合は、現在使用できないコードを実行しないことを明示的に決定します。

さらに、.Net 4.0を使用しているため、System.ComponentModel.CompositionにあるMEFという型解決フレームワークを使用して、依存関係を満たす別の方法を検討することもできます。 MEFを使用すると、タイプを簡単にロードして検出し、自動的に依存タイプに組み立てられます。この場合、検出を実行すると、依存関係が満たされていないことがわかります(プロパティ値はおそらくnullのままです)。その後、適切な処置を取ることができます。

関連する問題