【问题标题】:COM Side by Side Assemblies using dll's from another directory?使用来自另一个目录的 dll 的 COM 并排程序集?
【发布时间】:2012-01-25 14:28:18
【问题描述】:

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

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

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

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

作为私有程序集,一切正常。

【问题讨论】:

    标签: com assemblies shared sxs activation-context-api


    【解决方案1】:

    这应该可以使用激活上下文来实现。 (我假设你对清单等没问题,因为听起来你可以让它以“标准”方式正常工作......)

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

    This SO question 可能对您有用。这是一种方法的sn-p......

    // 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);
    

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多