Подтвердить что ты не робот

Ссылки на ссылки с COM-абонентом

У меня есть такой сценарий:

  • COM-вызов из приложения MS Access с помощью VBA
  • Вызов находится в библиотеке С#, которую мы создаем, которая имеет ссылку на Newtonsoft.Json v9
  • Библиотека использует пакеты nuget со своей зависимостью от Newtonsoft.Json v6 (скажем, Microsoft.AspNet.WebApi.Client)
  • Зависимая библиотека внутри своего собственного кода Blackbox взрывается, когда они пытаются использовать Newtonsoft.Json(или любую библиотеку, которая не является той же версией, на которую ссылается наша библиотека С#)

Ошибка:

Could not load file or assembly 'Newtonsoft.Json, Version=6.0.4.0, Culture=neutral, 
PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. 
The system cannot find the file specified.

Я ожидаю, что мне нужно что-то вроде привязки переопределения dependAssembly где-то, как то, что вы используете в .Net, чтобы указать, как разрешать эти типы вещей, но я ничего не нашел в своем поиске, который говорит мне, где это может понадобиться для ссылочной сборки в COM, чтобы поднять ее.

Стоит отметить, что в случае с Newtonsoft.Json понижение до 6.0.4 не является исправлением, потому что в различных пакетах, которые мы используем, есть несколько ссылок на Json.Net, поэтому я не могу просто выберите одну версию.

Кроме того, в приложении .NET-тестера, которое мы использовали во время разработки библиотеки, все работает так, как ожидалось, и ссылки сами используют правильные версии. Поэтому я считаю, что мне нужно выяснить, как сообщить COM, что он ищет.

Любая помощь приветствуется! Спасибо.

4b9b3361

Ответ 1

Обходной путь, который я нашел для этой проблемы, заключается в том, чтобы включить файл конфигурации в тот же путь к исполняемому файлу, который вызывает код С#.

Я обнаружил, что если я создам приложение VB6 под названием "myapp.exe", я мог бы создать в той же папке "myapp.exe" текстовый файл с именем "myapp.exe.config" со следующим содержание:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

В вашем случае, я считаю, что имя exe будет "msaccess.exe" или что-то в этом роде.