MMCベースのアプリケーションのスナップインであるc++コードがいくつかあります。このスナップインは、COMラッパー(AssemblyA)を介して.net2.0dllを使用します。AssemblyAは、MMCセッションを起動するアプリと同じディレクトリにあります。AssemblyAは、他の.net dll(OtherAssemblies)を使用しますが、これは、私の制御が及ばない理由により、AssemblyAと同じディレクトリに存在することはできません。また、一部のコンポーネントを(AssemblyBから)動的にロードできるようにし、3番目のディレクトリでこれらを検索します。AssemblyBの動的コンポーネントは、AssemblyAの基本クラスを拡張するため、AssemblyAを参照します。
私の問題は、動的コンポーネントを読み込もうとすると、AssemblyAへの依存関係を解決できず、AssemblyResolve
ハンドラーが起動されることです(これは解決に使用していましたOtherAssemblies
)。ハンドラーでクエリを実行Assembly.GetExecutingAssembly ()
するとAssemblyResolve
、アセンブリは解決しようとしているアセンブリです。
.NETランタイムが最初にロードされたアセンブリで依存関係を検索し、次にロードしているアセンブリのローカルで、次にappディレクトリで依存関係を検索することを期待していたので、この動作は少し奇妙に思えます。これらの最初と3番目には、ロードしようとしているアセンブリが含まれている必要があります。
AssemblyResolveメソッドを変更して、他の場所の依存関係を検索し、現在のアプリディレクトリのように機能するようにしましたが、手助けができれば、これは本当にやりたくありません。
この動作は予想されますか?それはMMCアプリであるためですか、それともC ++から呼び出されるCOMから起動されるためですか?私は劣等生ですか?