У меня есть этот (собственный) COM-сервер, назовем его N.dll , который вызывает некоторый API из управляемой сборки, назовем его M.dll . Чтобы это работало, существует DLL-библиотека смешанного режима для взаимодействия между ними; давайте назовем это MM.dll . Три библиотеки DLL (N, M и MM) находятся в одной библиотеке DLL, и сервер COM, очевидно, соответствующим образом зарегистрирован.
Я использую сборку M.dll с директивой using в MM.dll.
#using "M.dll"
using namespace M;
А затем просто создайте экземпляр и используйте типы, доступные в M.
Теперь этот COM-сервер может быть создан любым приложением, находящимся в любом месте системы. Это, очевидно, работает хорошо. Но как только N нужно вызвать API из M (через MM), я получаю System.IO.FileNotFoundException
(необработанное исключение: System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'M, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null 'или одна из его зависимостей. Система не может найти указанный файл.)
Если я скопирую сборку M.dll в ту же папку, где находится исполняемый файл, то все работает нормально. Однако это не решение, поскольку может быть много приложений, использующих COM-сервер, и я не могу развернуть M.dll во всех этих местах. И я также не могу сделать что-то с файлом конфигурации для процесса, по той же причине. Мне нужен способ указать модулю MM.dll смешанного режима загрузить загружаемую сборку из той же папки, где она находится.
Это возможно?