Подтвердить что ты не робот

Почему "bindingRedirect" добавлен в файл app.config после добавления пакета Microsoft.Bcl.Async?

Мне было интересно, почему 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-элемент из конфигурации, приложение не будет работать должным образом.

Насколько я понимаю, мы можем использовать bindingRedirect, чтобы приложение загружало новую или более старую версию сборки в случае, если версия, которую мы использовали при компиляции EXE, исчезла.
Однако я использую именно версию 2.5.19.0, зачем мне нужно перенаправление?

the version of my dll

Зачем мне это нужно bindingRedirect?

4b9b3361

Ответ 1

Агрегаты Microsoft.Threading.Tasks и Microsoft.Threading.Tasks.Extensions все еще ссылаются на v1.5.11.0 из System.Runtime и System.Threading.Tasks.

Без bindingRedirect сборки Microsoft.* попытаются загрузить старую версию сборок System.*, которая не удалась.

Ответ 2

Вы просто говорите, когда есть более старая версия, которая находится между 0.0.0.0 до 2.5.19.0, замените эту версию новой версией 2.5.19.0

Скажем, у вас нет старой версии, доступной в вашем проекте, и вы пытаетесь получить к ней доступ, тогда вы получите ошибку, например "System.IO.FileLoadException:" Не удалось загрузить файл или сборку "

Поэтому, когда ваш проект ищет более старую версию этой DLL, он просто заменит ее на новую, которая доступна