使用来自其他目录的dll的COM并行程序集?

问题描述:

我敢肯定的答案是否定的,但以防万一:使用来自其他目录的dll的COM并行程序集?

对于合适的SxS清单一个独立的EXE,是否有可能使用相对路径来引用COM DLL的或从一个目录是加载它们不是当前目录?

我们在部署使用公共文件夹的根各种包(即zip文件)网格environemnt操作。几个应用程序想从一个公共位置引用一个常见的COM Api(带有DLL清单)。然而,由于网格环境是沙箱不能安装到Windows目录下的SxS,我们还不能做到这一点带外(即不是由网格部署)。

我必须从.. \ SomeCommonDir \ COM.dllç称负荷COM.DLL的希望:\ Program Files文件\ SomeCommonDir \ COM.DLL

一切工作正常作为私人大会。

这应该使用激活上下文是可能的。 (我假设你确定与表现等,因为它听起来像你能得到它的做工精细的“标准”的方式......)

有做事here的“骨灰级”的方式,或者你可以使用Microsoft.Windows.ActCtx对象。这些都允许你手动/编程设置客户清单的激活上下文的位置;客户端清单确实必须位于与程序集清单和程序集相同的文件夹中。

This SO question可能对您有用。这里有一个方法来做到这一点...

// Create an activation context 
Type actCtxType = System.Type.GetTypeFromProgID("Microsoft.Windows.ActCtx"); 
dynamic actCtx = System.Activator.CreateInstance(actCtxType); 
actCtx.Manifest = @"Path\To\COMClient.manifest"; 

// Create the object you want, using the activation context 
dynamic obj = actCtx.CreateObject("COMTestService.COMTestObject"); 

// Now use it! 
var question = obj.GetQuestionFromAnswer(42);