我们有一个 asp.net 4.0 项目,它使用几个依赖于 log4net 版本 1.2.10.0 的框架。今天我尝试包含一个依赖于 log4net 版本 1.2.11.0 的新框架,从那时起我就陷入困境:
log4net 1.2.10.0 具有 publickeytoken = 1b44e1d426115821
log4net 1.2.11.0 的 publickeytoken = 669e0ddf0bb1aa2a
由于这些不同,我无法通过 web.config 中的运行时元素使用程序集重定向(使所有框架使用相同版本的 log4net)或代码库(仅让新框架使用版本 1.2.11.0)。
我在这里有什么选择?
(为什么 log4net 会在版本之间不断更改 publickeytokens,据我所知,丢失的密钥是版本 1.2.9.0 和 1.2.10.0 之间切换的原因,他们是否再次丢失了密钥?我将自愿提供我的保管箱如果他们需要的话保证它的安全......)
编辑:好的,所以 log4net 的人显然认为用两个键释放是一个好主意,但这意味着every您使用的框架需要达成一致which他们喜欢的两种风格中的一种,或者这些框架无法在同一个应用程序域中并行工作。我是唯一一个认为这是一个可怕想法的人吗?如果每个人都这样做,那么一切都会崩溃,对吗?
Edit2:正如我所说,我没有在业务代码中使用 log4net,但我使用了几个依赖于 1.2.10.0 的框架,当我尝试使用依赖于 1.2.11.0 的新框架(新密钥),所以 Stefans 的答案不适用,因为新框架将期望新密钥,而不是旧密钥
这就是我如何使用 1.2.11.0 版本进行工作。
- 首先诅咒 apache 更改密钥:)
-
Download http://www.apache.org/dyn/closer.cgi/logging/log4net/binaries/log4net-1.2.11-bin-oldkey.zip使用旧密钥签名的 1.2.11.0 版本。
- 通过删除对 log4net(新密钥)的任何直接引用来整理您自己的代码,并替换为对使用旧密钥签名的程序集的引用。
- 通过将此段包含在 web/app.config 中,整理出您可能拥有的所有依赖程序集
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.10.0"
newVersion="1.2.11.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)