我有一些 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 启动的?我是个笨蛋吗?