Com 对位于不同位置的多个DLL使用激活上下文API

Com 对位于不同位置的多个DLL使用激活上下文API,com,side-by-side,regfreecom,activation-context-api,Com,Side By Side,Regfreecom,Activation Context Api,我在运行于位置a的.Net客户端中使用激活上下文API,通过在ACTCTX中传入位置B,在WS2008上的位置B(与a完全不同的位置,而不是同一台机器上的同级/后代等)中加载COM组件reg free,它工作正常 但是,我现在需要对另一个COM dll做同样的事情,它反过来又依赖于两个位于完全不同位置的.Net COM程序集 我已将依赖的.Net程序集添加到清单中,并将清单和COM dll放在位置B中,但我必须将依赖的.Net程序集放在位置A(客户端运行的位置)才能使其工作。实际上,他们将生活在

我在运行于位置a的.Net客户端中使用激活上下文API,通过在ACTCTX中传入位置B,在WS2008上的位置B(与a完全不同的位置,而不是同一台机器上的同级/后代等)中加载COM组件reg free,它工作正常

但是,我现在需要对另一个COM dll做同样的事情,它反过来又依赖于两个位于完全不同位置的.Net COM程序集

我已将依赖的.Net程序集添加到清单中,并将清单和COM dll放在位置B中,但我必须将依赖的.Net程序集放在位置A(客户端运行的位置)才能使其工作。实际上,他们将生活在与位置A和位置B完全不同的目录中


我试图做的事情是否可行,即是否可以使用激活上下文api在不同的不相关目录中加载多个COM组件?

.NET查看活动和进程激活上下文,发现无注册元数据(
,等等),就像本机COM一样。但是,与本机COM不同,它不使用激活上下文中包含的信息来确定实际文件的位置。在这里,我相信它只会查看GAC,然后是客户端EXE旁边的文件位置。您可能可以使用Sysinternals Procmon来确认这一点。我想您可以尝试Hans建议的解决方法,或者手动将所需的程序集预加载到您的流程中,看看是否有效;我没有尝试这一点,因为在我的场景中,客户端exe是我无法控制的本机exe。

非常可疑,激活上下文中唯一的.NET感知是清单中的
元素。听起来不适用。GAC或AppDomain.AssemblyResolve是解决方法。在regfree COM中不使用本地部署通常是一个错误。甚至可以从同一个目录进行部署吗?您可以附加到应用程序域的AssemblyResolve事件,并根据需要加载dll,无论从哪个位置。您确定.NET查看进程默认激活上下文吗?如果我创建一个激活上下文并将其设置为流程默认值,那么我将激活第二个激活上下文(即使第二个激活上下文为空),我无法实例化其
位于第一个激活上下文中的对象。普通的
Assembly.Load
工作正常。关于我的评论:这似乎是.NET中缺少的功能(激活第二个激活上下文会隐藏流程默认激活上下文)。