将引用的程序集重定向到C#控制台应用程序中的其他版本

时间:2012-03-01 18:29:57

标签: .net assembly-resolution

我正在尝试在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文件的错误时仍会发生错误。

还有什么需要做才能实现这个目标,还是可以阻止这个程序集重定向工作的东西?

2 个答案:

答案 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文件。我让程序员映射了相同的驱动器,问题就消失了。