アセンブリバインディングリダイレクト: 方法と理由 質問する

アセンブリバインディングリダイレクト: 方法と理由 質問する

これは問題に関する質問ではなく、アセンブリ バインディング リダイレクトの動作に関する一般的な理解に関する質問です。

クエリ

  1. バインディング リダイレクトでメジャー バージョンのみが表示され、マイナー、ビルド、リビジョン番号が表示されないのはなぜですか?
  2. メジャーバージョンが変更された場合にのみ、古いバージョンと新しいバージョンが変更されますか?

    <dependentAssembly>
        <assemblyIdentity name="FooBar"  
                          publicKeyToken="32ab4ba45e0a69a1"  
                          culture="en-us" />  
    
        <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />  
    </dependentAssembly>
    

ベストアンサー1

そもそもなぜバインディング リダイレクトが必要なのでしょうか。ライブラリ B とバージョン 1.1.2.5 のライブラリ C を参照するアプリケーション A があるとします。ライブラリ B は、バージョン 1.1.1.0 のライブラリ C も参照します。実行時に同じアセンブリの異なるバージョンを読み込むことはできないため、競合が発生します。この競合を解決するには、通常は新しいバージョンへのバインディング リダイレクトを使用します (古いバージョンへのバインディング リダイレクトも使用できます)。これを行うには、アプリケーション A の app.config ファイルのセクションconfiguration > runtime > assemblyBinding(を参照)に次のコードを追加します。ここ完全な設定ファイルの例:

<dependentAssembly>
    <assemblyIdentity name="C"  
                      publicKeyToken="32ab4ba45e0a69a1"  
                      culture="en-us" />  

    <bindingRedirect oldVersion="1.1.1.0" newVersion="1.1.2.5" />  
</dependentAssembly>

マップするバージョンの範囲を指定することもできます。

<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />  

これで、バージョン 1.1.1.0 の C を参照してコンパイルされたライブラリ B は、実行時にバージョン 1.1.2.5 の C を使用するようになります。もちろん、ライブラリ C が下位互換性があることを確認する必要があります。そうしないと、予期しない結果が生じる可能性があります。

メジャーバージョンだけでなく、任意のバージョンのライブラリをリダイレクトできます。

おすすめ記事