我正在尝试在C#控制台应用程序中使用log4net RabbitMQAppender,这似乎需要引用RabbitMQ.Client 2.6.1.0。我目前正在使用最新版本2.7.1.0,这导致appender创建失败,并出现以下错误:
Could not create Appender [AmqpAppender] of type [log4net.RabbitMQ.RabbitMQAppender, log4net.RabbitMQ]. Reported error follows.
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'RabbitMQ.Client, Version=2.6.1.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84ce' or one of its dependencies. The system cannot find the file specified.
使用以前的版本替换RabbitMQ.Client可以解决问题,但我希望能够使用最新版本。
根据这里的another question,需要将以下配置添加到我添加的应用设置中:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="RabbitMQ.Client" />
<bindingRedirect oldVersion="2.6.1.0" newVersion="2.7.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
然而,这似乎没有任何区别,并且在appender抛出关于无法加载RabbitMQ.Client文件的错误时仍会发生错误。
还有什么需要做才能实现这个目标,还是可以阻止这个程序集重定向工作的东西?
答案 0 :(得分:1)
看起来我可能在某处遇到了配置不匹配问题。设置RabbitMQ.Client.dll文件以复制本地并将以下内容添加到我的应用程序配置解决了问题:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="RabbitMQ.Client" publicKeyToken="89e7d7c5feba84ce" culture="neutral" />
<bindingRedirect oldVersion="2.6.1.0" newVersion="2.7.1.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
答案 1 :(得分:0)
我有类似的问题。我创建了一个暴露COM接口的.NET DLL。在内部,我的DLL使用RabbitMQ.Client.dll。我的程序员在VB6应用程序中使用它。他得到了同样的文件找不到错误。但是,我可以使用.NET DLL创建一个VB6应用程序而不会得到错误。
我终于使用了ProcMon并在VB6.exe进程名称上过滤了结果。我能够确定.NET DLL是通过映射驱动器而不是UNC引用RabbitMQ.Client.DLL文件。我让程序员映射了相同的驱动器,问题就消失了。