Вот архитектура.У меня есть библиотека связи (с использованием 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 это не так.