2011-01-04 16 views
2

(WPF):アセンブリで見つかった各タイプの外部アセンブリからツールボックスコントロールにタイプを追加する方法は?私は私のWPFアプリケーションでこのような何かをしようとしています

ToolboxControl ctrl = new ToolboxControl(); 
    Assembly assembly = Assembly.LoadFile(file); 
    var category = new ToolboxCategory(assembly.GetName().Name); 
    foreach (Type t in assembly.GetTypes()) 
    { 
     var wrapper = new ToolboxItemWrapper(t, t.Name); 
     category.Add(wrapper); 
    } 
    ctrl.Categories.Add(category); 

すなわち追加ToolboxItemWrappers。最後の行は、次の例外をスローしかし、外部アセンブリの

http://img41.imageshack.us/img41/2261/7xvqv.png http://img41.imageshack.us/img41/2261/7xvqv.png

すべての依存関係は、メイン(WPF)アプリケーションで参照されている(画像参照)。ここで何が問題なのか、それを修正する方法は?

答えて

1

CustomLibraryアセンブリはファイルにありますか?そうでない場合は、このイベントAppDomain.CurrentDomain.AssemblyResolveをアプリケーションに接続し、filePathが参照するアセンブリがロードされている他のアセンブリをロードします。 CustomLibraryやその他のDLLがGACにない場合は、このオプションが必要です。

+0

はい、それは 'file'です。 –

+0

AssemblyResolveイベントにフックしてブレークポイントを設定することをお勧めします。すべての型が参照されていることと、CLRが見つけることができない依存関係を知ることができます。 –

+0

あなたはそうです。また、[この回答]も参照してください(http://stackoverflow.com/questions/4600688/how-to-make-an-external-assembly-available-at-runtime) –

2

反射を使用してアセンブリをロードする場合は、Assembly.LoadFileを使用しています。ただし、このメソッドは自動的に同じディレクトリ内の依存関係を検索しません。 Assembly.LoadFromを使用してください。

また、LoadFromがFusionを経由するため、ロードリクエストが別のアセンブリにリダイレクトされる一方、LoadFileは要求したとおりにロードされます。

+0

お返事ありがとうございます!融合とは何ですか? –

+0

'LoadFile'を' LoadFrom'に変更しようとしましたが、それでも動作しません。 –

+0

FusionはCLRのアセンブリローダーコンポーネントです。 CustomLibraryが要求されたときに例外が発生したと仮定すると、Fusionを使用すると[Fusion log viewer](http://msdn.microsoft.com/en-us/library/e74a18c4.aspx)を使用してアセンブリが読み込まれない理由を確認できます。 –

0

「CustomLisbrary」がGACにインストールされていることを確認してください。また、design.dllとVisualStudio.design.dllを作成することもできます。

関連する問題