Как вы можете заставить C ++ / CLI DLL разрешить зависимость от управляемых сборок (DLL) без использования GAC? - PullRequest
0 голосов
/ 25 сентября 2019

В настоящее время мы создаем драйвер ODBC в виде 4 библиотек DLL:

  1. Библиотека DLL, реализующая API ODBC (C), в основном реализованная на C ++, с некоторым «склеивающим» кодом, написанным на C ++ /CLI, используемый для взаимодействия с # 2, # 3, & # 4

  2. DLL, содержащая управляемую сборку (написанную на C #), которая определяет «базовые» интерфейсы, используемые для # 1 &# 4 для общения друг с другом.

  3. Еще одна DLL, содержащая управляемую сборку, которая зависит от # 2, и определяет некоторые расширения для классов в # 2
  4. Еще одна DLL, содержащаяуправляемая сборка, которая содержит «бизнес-логику» для драйвера, которая зависит от # 2 & # 3

Чтобы развернуть драйвер, мы настраиваем DSN для указания на # 1 и помещаем # 2, # 3 & # 4 в GAC.

У нас есть клиент, который хочет полностью избежать GAC.Я знаю, что размещение # 2, # 3 и # 4 в том же каталоге, что и приложение, которое загружает «1», «работает», но это не очень хорошее решение, потому что многие различные приложения могут использовать драйвер.

Как мы можем настроить его так, чтобы зависимости могли быть разрешены без GAC?Я попытался создать файлы манифеста (на основе https://docs.microsoft.com/en-us/windows/win32/sbscs/assembly-manifests),, но, похоже, это не сработало (исключение EEFileLoadException вызывается, потому что он не может найти управляемые сборки, то же самое происходит, как только я удаляю зависимости)из GAC.) Я поместил файлы манифеста и все файлы .DLL в один и тот же каталог.

Я не смог найти хорошую документацию / примеры для этого случая с некоторым (возможно, недостаточным) поиском в Google.

...