我有一些 c++ 代码是基于 MMC 的应用程序的管理单元。此管理单元通过 COM 包装器 (AssemblyA) 使用 .net 2.0 dll。AssemblyA 与启动 MMC 会话的应用程序位于同一目录中。AssemblyA 使用其他一些 .net dll (OtherAssemblies),由于我无法控制的原因,它们不能与 AssemblyA 位于同一目录中。它还允许动态加载某些组件(从 AssemblyB),并在第三个目录中搜索这些组件。来自 AssemblyB 的动态组件引用了 AssemblyA,因为它们在其中扩展了一个基类。
我的问题是,当我尝试加载动态组件时,它无法解析对 AssemblyA 的依赖,并且我的AssemblyResolve处理程序被触发(我使用它来解决OtherAssemblies)。当我Assembly.GetExecutingAssembly ()在AssemblyResolve处理程序中查询时,程序集就是我要解析的程序集。
这种行为对我来说似乎有点奇怪,因为我希望 .NET 运行时首先在加载的程序集中查找依赖项,然后在我正在加载的程序集中查找依赖项,然后在 app 目录中查找。其中的第一个和第三个应该包含我要加载的程序集。
我已经修改了我的 AssemblyResolve 方法,以便它在其他位置搜索依赖项,因此它可以工作,例如当前的应用程序目录,但如果我能提供帮助,我真的不想这样做。
这种行为是预期的吗?是因为它是一个 MMC 应用程序,还是因为它是从 C++ 调用的 COM 启动的?我是个笨蛋吗?