51

我想知道为什么 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,那我为什么需要重定向呢?

我的 dll 版本

为什么我需要这个bindingRedirect

4

2 回答 2

43

程序集Microsoft.Threading.TasksMicrosoft.Threading.Tasks.Extensions仍然引用 v1.5.11.0System.RuntimeSystem.Threading.Tasks.

如果没有bindingRedirectMicrosoft.*程序集将尝试加载旧版本的System.*程序集,这将失败。

于 2013-06-04T17:50:36.017 回答
9

您只是说,只要有0.0.0.0 到 2.5.19.0之间的旧版本,请将该版本替换为 2.5.19.0 的新版本

假设您的项目中没有可用的旧版本并且您正在尝试访问它,那么您最终会遇到类似“System.IO.FileLoadException:'无法加载文件或程序集”这样的错误

因此,当您的项目正在寻找该 DLL 的旧版本时,它只会将其替换为可用的新版本

于 2017-06-30T10:06:57.750 回答