DLL(.Net クラスライブラリ=アセンブリ) を実行時に動的ロードする。(System.Reflection.Assembly.LoadFrom)

サンプルコードLoadAssembley.zip 直

.Net で作成したDLLを使用するためには、使用したいDLL(アセンブリ)を参照設定して使用します。参照設定したDLLはアプリ起動時にDLLとのリンクを解決するために、メモリ上にロードされ、クラスやメソッドのエントリーポイントが決定されリンクされます。これは通常のリンクの仕方です。ですが、大量のDLLを取り扱う場合や、VisualStudioのアドインのようにユーザが任意に作成した不特定多数のDLLを読み込む場合はあらかじめ参照設定できないので、実行時にDLLを動的ロードする必要が出てきます。

動的にロードするためには、System.Reflection.Assembly.LoadFromメソッドを使用します。このメソッドはファイル名もしくはフルパスを指定して呼び出します、ファイル名だけの場合は、カレントディレクトリとアプリケーション構成ファイルのProbing Pathに設定されたサブディレクトリを検索して読み込むDLLが決まります。ファイルが見つからない場合は、System.IO.FileNotFoundExceptionが発生します。

Author.dllのForm1クラスのインスタンスを生成して表示する例


Public Class StartUp

Public Shared Sub Main()

Dim asm As System.Reflection.Assembly = Nothing

Try
asm = System.Reflection.Assembly.LoadFrom("Author.dll")
Catch ex As System.IO.FileNotFoundException
Debug.Print("NOT FOUND")
End Try

If Not asm Is Nothing Then

Dim instance As Object = Activator.CreateInstance(asm.GetType("Author.Form1"))
Dim f As System.Windows.Forms.Form = CType(instance, System.Windows.Forms.Form)

f.ShowDialog()

End If

End Sub

End Class