同じアセンブリの複数のバージョンをロードする 質問する

同じアセンブリの複数のバージョンをロードする 質問する

私はサードパーティのアセンブリを使用していますが、残念ながら、実行時にどちらをロードするかを決定できるように、最新バージョンと以前のバージョンをプロジェクトにロードする必要があります。必要なのはどちらか 1 つだけで、両方は必要ありません。

これを念頭に置くと、コンポーネントによって提供される型にも依存するため、使用したいメソッド/イベント/インターフェースを毎回リフレクションからロードしてクエリすることはできません。AppDomains を介してこれを処理することについて言及されているのを見たことがありますが、どのように進めればよいかわかりません。

プロセスは、コンポーネントの 1 つのバージョンに対してコーディングし、実行時に ( を使用してAppDomain) 使用する正しい DLL にスワップすることになりますか? つまり、起動時にのみこれを処理することになりますか?

ベストアンサー1

両方のアセンブリに互換性がある場合は、bindingRedirect を宣言して、常に新しいバージョンを使用するように app.exe.config または web.config ファイルで定義できます。

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705">
        <dependentAssembly>
            <assemblyIdentity name="Regcode" publicKeyToken="b03f5f7f11d50a3a" culture=""/>
            <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
        </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

dotnet 1.0 のこの構成エントリは、呼び出し側の exe に何がコンパイルされているかに関係なく、アセンブリ ローダーに常にバージョン 1.0.3300.0 を使用するように指示します。新しい dotnet バージョンでも同じことが可能です。

おすすめ記事