Перенаправить ссылочную сборку в другую версию в консольном приложении C # - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь использовать log4net RabbitMQAppender в консольном приложении C #, и кажется, что для этого требуется ссылка на RabbitMQ.Client 2.6.1.0. В настоящее время я использую последнюю версию 2.7.1.0, которая приводит к сбою создания приложения с помощью следующей ошибки:

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 предыдущей версией исправляет проблему, хотя я бы хотел, чтобы это работало с последней версией.

Согласно другому вопросу здесь, на SO, необходимо добавить следующую конфигурацию в настройки приложения, которые я добавил:

<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 ]

1 голос
/ 01 марта 2012

Похоже, у меня где-то было несоответствие конфигурации.Установка файла 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>
0 голосов
/ 26 января 2013

У меня была похожая проблема. Я создал .NET DLL, которая выставила интерфейс COM. Внутренне моя DLL использовала RabbitMQ.Client.dll. Мой программист использовал это в приложении VB6. Он получал тот же файл не найдена ошибка. Тем не менее, я мог бы создать приложение VB6 с помощью .NET DLL и не получить ошибку.

Я, наконец, использовал ProcMon и отфильтровал результаты по имени процесса VB6.exe. Я смог определить, что .NET DLL ссылается на файл RabbitMQ.Client.DLL через подключенный диск вместо UNC. У меня была карта программатора на том же диске, и проблема ушла.

...