В настоящее время мы разрабатываем надстройку для некоторого программного обеспечения.Мы решили разрабатывать в .NET, хотя приложение написано на каком-то родном языке.Поскольку при создании внешнего интерфейса в .NET возникали некоторые проблемы, мы решили создать DLL-библиотеку моста в C ++ / CLI, которая выполняет некоторую базовую инициализацию, а затем загружает нашу управляемую сборку и создает из нее пользовательский элемент управления.* В файле надстройки .ini на DLL C ++ / CLI ссылается по имени, поэтому приложение будет загружать ее оттуда.На DLL-библиотеку .NET, однако, ссылаются только на DLL-библиотеку C ++ / CLI (в качестве управляемой ссылки), поэтому экспортируемые типы доступны.В этой настройке, однако, приложение аварийно завершает загрузку .NET DLL.
Мы быстро обнаружили, что можем просто подписаться на событие AppDomain.AssemblyResolve
для загрузки сборки .NET из того же каталога, где находится C ++ / CLI.DLL есть, поэтому сама проблема решена.
Фактический вопрос: почему загрузчик не находит .NET DLL, даже если он находится в том же каталоге, что и сборка, на которую он ссылается?Я всегда ожидал, что загрузочные сборки будут сначала смотреть в один и тот же каталог, а не только в текущий рабочий каталог.Почему исполняемый файл находит сборку, если он меняет свой рабочий каталог?Или все по-другому, если CLR вызывается загрузкой сборки C ++ / CLI (а не чисто управляемого приложения)?