【发布时间】:2015-04-18 12:27:51
【问题描述】:
项目 A 使用 log4net 1.2.13.0,并依赖于使用 log4net 1.2.11.0 的库 B。如果我这样做Package Manager Console> Add-BindingRedirect,我会在app.config 中获得正确的绑定重定向:
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.13.0" newVersion="1.2.13.0" />
</dependentAssembly>
我认为这是必需才能完成构建。但是在没有重定向的情况下构建也会成功。这是我在构建日志中看到的(详细设置为详细):
统一主要参考“log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a”。 在“C:\Users\vorou\code\ConsoleApplication1\packages\LibraryB.dll”中使用此版本而不是原始版本“1.2.11.0”,因为 AutoUnify 为“true”。
AutoUnify 是关于什么的?哪个更好,即在 .config 中进行显式重定向有什么好处?
另外,我记得,在某些情况下,您需要添加绑定重定向。否则应用程序将在运行时崩溃。这些情况是什么?为什么AutoUnify 魔法对他们不起作用?
UPD这是MSDN关于AutoUnify的摘录:
此参数用于构建程序集,例如 DLL,这些程序集不能具有正常的 App.Config 文件。 当为 true 时,生成的依赖关系图会自动被视为有一个 App.Config 文件传递给 AppConfigFile 参数。此虚拟 App.Config 文件对于每个冲突的程序集集都有一个 bindingRedirect 条目,以便选择最高版本的程序集。这样做的结果是永远不会有关于冲突程序集的警告,因为每个冲突都将得到解决。
在我的情况下,.config 中的重定向似乎没有任何作用。问题是库 B 不能满足它的依赖关系,AutoUnify 用“假装存在绑定重定向”规则解决了它。
【问题讨论】: