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 StartUpPublic 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 TryIf 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