У меня есть неуправляемый внутрипроцессный COM-объект C ++ / ATL (в Unmanaged.dll), который я пытаюсь использовать из управляемой библиотеки C # DLL (Managed.dll). Однако я хочу использовать COM без регистрации. У меня есть следующие шаги:
- Зарегистрируйте COM-объект на машине разработки. Внутрипроцессный сервер должен иметь правильно зарегистрированную библиотеку типов.
- Добавьте ссылку на COM-объект в проект C #, а затем установите для свойств ссылки значение Isolated = True.
Это создает Unmanaged.dll, Managed.dll и Native.Managed.manifest. Открыв манифест, довольно ясно, как система использует его для загрузки COM-объекта без регистрации.
Вот в чем загвоздка. У меня есть управляемый EXE (Managed.exe), который динамически загружает Managed.dll для доступа к общедоступным типам. Под «динамически» я подразумеваю то, что он использует Assembly.LoadFrom («Managed.dll»). Когда код внутри Managed.dll пытается создать COM-объект, он получает исключение «класс не зарегистрирован». Похоже, контекст активации не настраивается правильно при загрузке Managed.dll.
Есть ли способ получить бесплатную регистрацию COM для работы в этом сценарии?