Для справки IBM.WMQ .Net, почему мой код не загружает версию amqmdnet.dll для конкретного приложения? - PullRequest
1 голос
/ 31 октября 2019

У меня настроенная версия amqmdnet.dll, на которую ссылается мой проект локально И которая развернута вместе с приложением.

Это в журналах сервера, на котором работает наше приложение и который взаимодействует с IBMqueues

System.IO.FileLoadException: Could not load file or assembly '' or one of its dependencies. 
         General Exception (Exception from HRESULT: 0x80131500)
         File name: 'amqmdnet, Version=7.5.0.0, Culture=neutral, PublicKeyToken=dd3cb1c9aae9ec97'
            at IBM.WMQ.MQDestination.Put(MQMessage message)

Однако файл проекта (.csproj) ссылается на совершенно другую версию amqmdnet.dll

<Reference Include="amqmdnet, Version=9.0.5.0, Culture=neutral, PublicKeyToken=dd3cb1c9aae9ec97, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>IBM\amqmdnet.dll</HintPath>
    </Reference>

Мы задаемся здесь несколькими вопросами

  • В журналах сервера почему номер версии amqmdnet dll отображается как 7.5.0.0 с тем же маркером открытого ключа, даже если у нас развернута версия 9.0.3.0? На сервере не установлен клиент IBM (это пустой контейнер Azure).
  • Исключение выдается ТОЛЬКО при вызове метода Put. До этого много инициализации происходит без проблем, например. инициализация объектов MQQueue и так далее. Почему метод Put правильной сборки (9.0.3.0) пытается вызвать метод из другой версии сборки (7.5.0.0)?

Обновление Это произошло из-засистемная проблема и перезапуск, кажется, исправляет это. Он по-прежнему не говорит нам, почему возникла проблема, но не имеет ничего общего с amqmdnet или, возможно, даже с кодом.

1 Ответ

1 голос
/ 01 ноября 2019

Создайте app.config с содержимым, подобным следующему, чтобы убедиться, что программа использует конкретную версию amqmdnet.dll.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="amqmdnet" publicKeyToken="dd3cb1c9aae9ec97" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-9.0.3.0" newVersion="9.0.3.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...