【发布时间】:2012-02-03 08:46:07
【问题描述】:
我们有一个 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 的人显然认为使用两个键发布是个好主意,但这意味着您使用的 每个 框架都需要就 他们喜欢的两种风格,或者这些框架不能在同一个应用程序域中并行工作。只有我一个人觉得这是个可怕的主意吗?如果每个人都这样做,那么一切都会崩溃,对吧?
Edit2:正如我所说,我没有在我的业务代码中使用 log4net,但我使用了几个依赖于 1.2.10.0 的框架,当我尝试使用依赖于 1.2.11.0 的新框架时出现了问题(新密钥),所以 Stefans 的回答不适用,因为新框架会期望新密钥,而不是旧密钥
【问题讨论】:
-
恕我直言,这里 apache 的第一个错误是提供使用新密钥签名的二进制文件:新密钥用于修补/增强的开源版本,不应按原样使用。第二个错误是您所说的框架已发布,仅带有新的 log4net 签名:应该存在带有旧签名的版本。
-
实际上,您看到的是第三种风格:SAP 的天才们以他们自己的强名重新编译,作为 Crystal Reports for Visual Studio 包的一部分,更糟糕的是,他们将其卡在 GAC 中,这将使您跨机器的依赖关系成为一场噩梦。
标签: .net dll log4net publickeytoken