У меня есть некоторый код на C ++, который является оснасткой для приложения на основе MMC. Эта оснастка использует dll .net 2.0 через оболочку COM (AssemblyA). AssemblyA находится в том же каталоге, что и приложение, запускающее сеанс MMC. AssemblyA использует некоторые другие библиотеки .net (OtherAssemblies), которые по независящим от меня причинам не могут находиться в том же каталоге, что и AssemblyA. Он также позволяет динамически загружать некоторые компоненты (из AssemblyB) и ищет их в третьем каталоге. Динамические компоненты из AssemblyB ссылаются на AssemblyA, поскольку они расширяют базовый класс.
Моя проблема в том, что когда я пытаюсь загрузить динамический компонент, он не может разрешить зависимость от AssemblyA, и мой обработчик AssemblyResolve
запускается (который я использовал для разрешения OtherAssemblies
). Когда я запрашиваю Assembly.GetExecutingAssembly ()
в обработчике AssemblyResolve
, сборка - это сборка, которую я пытаюсь разрешить.
Это поведение кажется мне немного странным, так как я ожидал, что среда выполнения .NET будет сначала искать зависимости в загруженных сборках, затем локально для загружаемой сборки, а затем в каталоге приложения. Первый и третий из них должны содержать сборку, которую я пытаюсь загрузить.
Я изменил свой метод AssemblyResolve, чтобы он искал зависимости в других местах, чтобы он работал, как в текущем каталоге приложения, но я не очень хочу этого делать, если смогу помочь.
Ожидается ли такое поведение? Это из-за того, что оно является приложением MMC или из-за того, что оно запускается из COM, вызываемого из C ++? Я дурак?