Как использовать перенаправления привязки в .NET COM DLL с неуправляемым клиентом? - PullRequest
0 голосов
/ 14 июня 2019

Вот архитектура.У меня есть библиотека связи (с использованием Kestrel и Websockets) в DLL библиотеки классов C #.Давайте назовем это «Communication.dll».У меня также есть библиотека классов C # («ComObject.dll»), которая является COM-объектом, обертывающим «Communication.dll».

Наконец, у меня есть (очень) устаревшее приложение C ++, которое использует «ComObject.длл »через COM.Мы назовем это «Client.exe».

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

Да, я знаю.Это то, для чего были созданы обязательные редиректы.Тем не менее, я не могу заставить это работать в этом сценарии.Как правило, автоматически сгенерированные перенаправления привязки должны исправить это для вас, но опять же, это не похоже на работу в этом сценарии.

Поэтому мой вопрос заключается в том, как вы должны указать файл конфигурации, когда.exe не управляется.

В библиотеке «Communication.dll» есть файл app.config в проекте, но я не думаю, что это что-то делает.Редактирование, похоже, не имеет значения.Когда автоматически генерируемые перенаправления привязки включены, файлы .config генерируются для обеих библиотек DLL.Тем не менее, я не думаю, что они на самом деле используются.Если я отредактирую этот файл конфигурации перед запуском, изменения, похоже, не будут иметь значения.Если у меня нет точной нужной версии, я получаю исключение FileNotFoundException.

Например, где-то в путанице сборок кому-то требуется Microsoft.AspNetCore.Mvc.Core версии 2.2.0.0.Если я установлю 2.2.5.0, все будет собираться, но я получу исключение FileNotFoundException, когда код попытается его использовать.Мне нужно добавить следующее перенаправление привязки (в правильно отформатированном файле конфигурации:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.AspNetCore.Mvc.Core" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.2.5.0" newVersion="2.2.5.0" />
  </dependentAssembly>

. Как я уже говорил выше, .exe не управляется, поэтому в проекте нет app.config, и добавление«Client.exe.config» для выходного каталога не представляется вероятным решением.

Я могу решить вышесказанное, просто снизив версию до 2.2.0.0. Ничего страшного.

Однакогде-то в путанице компонентов кому-то требуется System.Buffers 4.0.3.0. Кому-то требуется 4.5.0.0, а кому-то - 4.4.0.0. Если я пытаюсь понизить версию, все подходит (много обнаруженных ошибок понижения).Если я пытаюсь установить 4.5.0.0, никакое перенаправление привязки нигде не может избежать FileNotFoundException.

Если я выполняю кучу поиска, я обнаруживаю, что у многих людей конкретно возникают проблемы с System.Buffers (например,, https://github.com/dotnet/corefx/issues/33148), но я не нашел решения. На самом деле, одно место просто сказало «обнови все свои компоненты, и оно волшебным образом начнет работать».d это не так.

...