アセンブリの動的読み込みに関する質問を既に見ました
基本的に、私は3つのことをしたいです:
1) ユーザーが選択した (管理された) アセンブリを動的にロードする
2)アセンブリを変更します(プログラム自体で)
3) ロードされたアセンブリを新しいものと交換します
以下のコードは、正しいアセンブリをロードします。
System.Reflection.Assembly myDllAssembly = System.Reflection.Assembly.LoadFile(assemblyPath);
しかし、私の知る限り、ファイルを置き換えるには、まずファイルをアンロードしてファイル ハンドルを削除する必要があります。AppDomain
そこで、以下のコードを使用してファイルをロードしようとしました:
AppDomain dom = AppDomain.CreateDomain("assemblyLoadDomain");
AssemblyName assemblyName = new AssemblyName();
assemblyName.CodeBase = assemblyPath;
Assembly assembly = dom.Load(assemblyName);
// do operation here
AppDomain.Unload(dom);
これにより、 で定義されたパスではなく、アプリケーションの起動パスでアセンブリの検索が開始されassemblyPath
ます。見つからない場合は、FileNotFound 例外が発生します。Process Explorer を使用してこれを確認しました: また、読み込まれているスタートアップ パスのアセンブリも表示されます。
また、アセンブリはアンロードされていません。
私は何を間違っていますか???