C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: フォルダを指定してアセンブリ内のクラス一覧を取得したい


(過去ログ 108 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■64494 / inTopicNo.1)  フォルダを指定してアセンブリ内のクラス一覧を取得したい
  
□投稿者/ まり (10回)-(2012/12/05(Wed) 14:01:03)

分類:[.NET 全般] 

いつも参考にしています

アセンブリ内のPublicなクラス一覧を取得しようとしているのですが

下記のやり方ですと取得できますがファイルをつかんだままになります

        'これだと解放されない
        'Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom(Path + "\" + LibraryName)
        'Return asm.GetExportedTypes()

そこで下記のやり方をためしたところファイルが実行環境と同じフォルダにないと識別しませんでした

        Dim AppSetUp As New AppDomainSetup()
        AppSetUp.ApplicationBase = Path
        AppSetUp.ShadowCopyFiles = "true"
        Dim MainDomain As AppDomain = AppDomain.CreateDomain("MyClassLibrary", Nothing, AppSetUp)
        Try
            Dim asm As System.Reflection.Assembly = MainDomain.Load(AssemblyName)
            Return asm.GetExportedTypes()
        Catch ex As Exception
        Finally
            '解放
            AppDomain.Unload(MainDomain)
        End Try

実行環境と違う場所にあるアセンブリ内を参照したい(かつファイルを解放したい)のですがどうやればよいでしょうか?

引用返信 編集キー/
■64512 / inTopicNo.2)  Re[1]: フォルダを指定してアセンブリ内のクラス一覧を取得したい
□投稿者/ Hongliang (23回)-(2012/12/05(Wed) 15:56:12)
単に型情報を取るだけなら、Assembly.Load(byte[])またはAssembly.ReflectionOnlyLoad(byte[])を使用できます。
渡すbyte[]はファイルのバイナリそのものです。
// アセンブリはロードされたままなので、アセンブリ修正→再読込はエラーになります。

プラグインのように実際にアセンブリを動的ロードして処理させたいとか、再読込もできるようにしたいといった場合、
AppDomainを使って、ドメインを越えるデータに注意を払いつつ処理する必要があります。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -