【发布时间】:2012-02-16 11:40:52
【问题描述】:
我对此很陌生,所以如果我的问题结构不合理或只是在错误的地方等,我深表歉意。我已经很好地寻找解决方案并尝试了许多不同的方法,但没有没有找到任何有用的东西......
我有一个使用 Nhibernate 的解决方案,因此必须使用 log4net V1.2.10.0,它位于 log4net/2.0/ 文件夹中。但是,我的解决方案还链接到许多其他解决方案,我对这些解决方案的访问权限非常有限。这些使用相同的 log4net V.1.2.10.0 但在文件夹中:log4net/1.2/
当我运行我的解决方案时,我得到了这个错误。
{"Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral,
PublicKeyToken=e27b8fa57f63a98d' or one of its dependencies. The located assembly's
manifest definition does not match the assembly reference. (Exception from HRESULT:
0x80131040)":"log4net, Version=1.2.10.0, Culture=neutral,
PublicKeyToken=e27b8fa57f63a98d"}
我试图修改它调用的解决方案,但是每次我修改一个解决方案时,只要它尝试使用另一个解决方案,我就会在该解决方案中得到错误,所以我必须修改另一个,依此类推。有太多的解决方案需要修改,并且与其他解决方案有太多的相互依赖,我完全无法控制我无法全部更改它们,以便它们使用 log4net/2.0。
我发现了另一个问题(Referencing 2 different versions of log4net in the same solution),我认为这基本上是相同的问题,并且他们使用绑定修改了 app.config,但是我似乎无法做到这一点,因为我还在同样的错误。我在 app.config 中包含的绑定是这样的:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="e27b8fa57f63a98d" />
<codeBase version="1.2.10.0" href="2.0\log4net.dll" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821"/>
<codeBase version="1.2.10.0" href="1.2\log4net.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
我不确定另一个问题的答案是什么意思,当它说“您在项目中为每个 log4net 版本创建 2 个文件夹。您通过将文件添加到解决方案(不添加参考)。您可以将复制到输出目录属性设置为始终复制,以便在构建时自动复制到输出文件夹。我需要对我的解决方案引用的每个解决方案都这样做吗?
理想情况下,我希望能够对我的解决方案进行修改,这仅仅意味着它不关心任何解决方案使用的 log4net,但它们仍然可以在彼此之间传递日志消息。我认为这是可能的,所以任何帮助将不胜感激。或者我如何关闭 nHibernate 的记录器,这样它就不会关心我正在使用什么 log4net,所以我可以继续使用所有其他解决方案正在使用的 log4net/1.2。我已经尝试了各种方法来关闭它,但它似乎最终还是试图找到 log4net/2.0。
【问题讨论】:
-
对不起,我才意识到我没有包含这部分。当我使用上面的绑定时,我会在尝试运行解决方案时立即收到此错误。
{"Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)":"log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"}如果我在尝试引用另一个解决方案之前不使用它运行的绑定,那么我会在顶部收到错误。 -
您使用的是哪个版本的 NHibernate? NHibernate 自 3.0.0 起不再需要特定版本的 log4net。
-
别担心,在开始使用 OSS 项目时遇到“DLL 地狱”版本控制问题并不罕见;但值得坚持
标签: nhibernate log4net