web-dev-qa-db-ja.com

Microsoft.Bcl.Asyncパッケージを追加した後、app.configファイルに「bindingRedirect」が追加されるのはなぜですか?

Nugetが私のアプリケーションに次のコードを追加した理由が不思議でしたapp.configファイル、インストール後Microsoft.Bcl.Async

<runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

このXML要素を構成から削除すると、アプリは正常に動作しなくなります。

私が理解している限り、EXEのコンパイル時に使用していたバージョンがなくなった場合に、bindingRedirectを使用して、新しいバージョンまたは古いバージョンのアセンブリをアプリにロードできます。
しかし、私は正確にバージョンを使用しています2.5.19.0、なぜリダイレクトが必要なのですか?

the version of my dll

なぜこれが必要なのかbindingRedirect

46
GameScripting

アセンブリMicrosoft.Threading.TasksおよびMicrosoft.Threading.Tasks.Extensionsは、System.RuntimeおよびSystem.Threading.Tasksのv1.5.11.0を引き続き参照しています。

bindingRedirectがないと、Microsoft.*アセンブリはSystem.*アセンブリの古いバージョンをロードしようとしますが、失敗します。

41
Richard Deeming

.0.0.0から2.5.19.の間にある古いバージョンがある場合は、単にそのバージョンを2.5.19.0の新しいバージョンに置き換えてください。

プロジェクトで使用可能な古いバージョンがなく、それにアクセスしようとすると、「System.IO.FileLoadException: 'Could not load file or Assembly」のようなエラーが発生します。

したがって、プロジェクトがその古いバージョンを探している場合、DLL

8
Bhargav Konda