免注册COM互操作和相关组件

Jef*_*eff 7 .net com interop sxs regfreecom

我们正在开发一个基于MFC的大型应用程序与少数托管(.NET)加载项的集成.与这些加载项的通信是通过COM完成的.

从历史上看,我们刚刚使用注册表将这些加载项(作为COM服务器)提供给应用程序.但是,现在我们正在尝试使用无注册的COM互操作来实现这一目标.

我们希望这些加载项能够与运行应用程序的目录位于一个单独的目录中 - 最好是在任何地方.但是,由于无法解析依赖程序集,我们显然遇到了服务器对象实例化的问题,这些程序集也存在于COM服务器DLL的目录中.

"老式"COM互操作在加载目标程序集时使用LoadFrom上下文来处理此问题.但激活上下文机制似乎并没有这样做.

有谁知道如何让这个工作?目前尚不清楚我们是否可以在模块的SxS清单中识别依赖程序集,或者我们是否可以以不同方式创建激活上下文?

感谢您的任何想法/提示!

杰夫

小智 1

希望我理解这个问题,因为我对 MFC 项目及其限制不太熟悉。一个具有接口(永久注册到 MFC 应用程序)的“众所周知的”.NET 类怎么样,该接口反过来处理所有激活和实例化?

罗德尼

  • 这实际上是一个成功的解决方法:我们创建一个 C++/CLI 模块,可以以免注册的方式激活该模块,并使用它来实例化 C# 类。为了使其工作,我们还需要设置一个 AssemblyResolve 事件处理程序,以便可以找到同一目录中的依赖程序集。这没问题,但有点笨拙。看起来这应该能够在没有这种额外的间接级别的情况下工作。 (2认同)