2

アセンブリの動的読み込みに関する質問を既に見ました

基本的に、私は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 を使用してこれを確認しました: また、読み込まれているスタートアップ パスのアセンブリも表示されます。

また、アセンブリはアンロードされていません。

私は何を間違っていますか???

4

0 に答える 0