COM并排程序集使用dll';它来自另一个目录?

COM并排程序集使用dll';它来自另一个目录?,com,assemblies,shared,sxs,activation-context-api,Com,Assemblies,Shared,Sxs,Activation Context Api,我很确定答案是否定的,但以防万一: 对于具有适当SxS清单的独立exe,是否可以使用相对路径引用COM DLL或从非当前目录的目录加载它们 我们在一个网格环境中运行,该环境使用一个公共文件夹作为根目录部署各种包(即zip文件)。一些应用程序希望从公共位置引用公共COM Api(带有DLL清单)。但是,由于网格环境是沙盒环境,我们无法安装到Windows SxS目录,也无法在带外进行安装(即,不由网格部署) 我是否希望从加载COM.DLL。\SomeCommonDir\COM.DLL或C:\Pro

我很确定答案是否定的,但以防万一:

对于具有适当SxS清单的独立exe,是否可以使用相对路径引用COM DLL或从非当前目录的目录加载它们

我们在一个网格环境中运行,该环境使用一个公共文件夹作为根目录部署各种包(即zip文件)。一些应用程序希望从公共位置引用公共COM Api(带有DLL清单)。但是,由于网格环境是沙盒环境,我们无法安装到Windows SxS目录,也无法在带外进行安装(即,不由网格部署)

我是否希望从加载COM.DLL。\SomeCommonDir\COM.DLLC:\Program Files\SomeCommonDir\COM.DLL


作为一个私有程序集,一切都可以正常工作。

这应该可以使用激活上下文。(我假设您同意清单等,因为听起来您能够以“标准”方式使其正常工作……)

这是一种“硬核”方式,或者你可以使用
Microsoft.Windows.ActCtx
对象。这两种方法都允许您手动/以编程方式设置激活上下文的客户端清单的位置;客户端清单必须与程序集清单和程序集位于同一文件夹中

也许对你有用。这里有一个方法的片段

//创建激活上下文
类型actCtxType=System.Type.GetTypeFromProgID(“Microsoft.Windows.ActCtx”);
动态actCtx=System.Activator.CreateInstance(actCtxType);
actCtx.Manifest=@“Path\To\COMClient.Manifest”;
//使用激活上下文创建所需的对象
dynamic obj=actCtx.CreateObject(“COMTestService.COMTestObject”);
//现在使用它!
变量问题=对象从答案中获取问题(42);