And*_*sen 98 .net dll log4net publickeytoken
我们有一个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版本之间切换的原因,他们是否再次丢失密钥?我会自愿提供我的Dropbox如果他们需要它,以保证安全......)
编辑:好的,所以log4net的人显然认为用两个密钥发布是一个好主意,但这意味着你使用的每个框架需要就他们喜欢的两种风格中的哪一种达成一致,或者那些框架不能正常工作在同一个应用程序域中.我是唯一发现这个可怕想法的人吗?如果每个人都这样做,那么一切都会崩溃,对吧?
Edit2:正如我所说,我没有在我的业务代码中使用log4net,但是我使用了几个依赖于1.2.10.0的框架,当我尝试使用依赖于1.2.11.0的新框架时出现问题(新密钥) ),所以Stefans的回答并不适用,因为新的框架会期望新的密钥,而不是旧的密钥
Dav*_*sen 65
这就是我使用1.2.11.0版本的方法.
<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>
Run Code Online (Sandbox Code Playgroud)
jga*_*fin 26
我正在使用我通过nuget下载的最新版本的log4net.但是,我使用的其中一个库需要旧版本.我的烦恼引发了我这个问题.
其他答案的问题是它们对所有绑定使用相同的dll版本.我希望将新版本中的功能用于除遗留依赖之外的所有其他功能.
为此,您需要执行以下操作:
log4net.1.2.10.dll.将Build action设置为None和"Copy if newer"将
其包含在启动项目中
App.config中
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" />
<codeBase version="1.2.10.0" href="log4net.1.2.10.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)
该href属性标识了旧版本.因此,对log4net的所有其他请求将指向新版本.
您可以下载使用旧密钥签名的 log4net 1.2.11.0 版本。更改为新密钥的原因在他们的常见问题解答中进行了解释:
http://logging.apache.org/log4net/release/faq.html#two-snks
(基本上,新密钥是公开可用的,出于某种原因,他们不想在分发中包含旧密钥。我不清楚为什么他们不只是公开旧密钥)
| 归档时间: |
|
| 查看次数: |
33319 次 |
| 最近记录: |