1

这里的环境是 C#/.Net 4。

在我的 MS 单元测试单元测试项目中,我正在测试一段代码,它使用 COM dll 进行一些日期转换计算(这又使用了一些其他 COM DLL,因此涉及所有三个 COM DLL)。

在正常的应用程序/服务设置中运行时,通过使用链接到 COM dll 程序集标识的清单,我可以毫无问题地让并行执行工作,但是当尝试从我的单元测试中执行相同操作时项目,我总是因为“类未注册”异常而失败。

现在,我已经尝试过了:

  • 嵌入测试 DLL 清单
  • 嵌入测试 DLL 清单、COM dll 清单 + COM DLL 本身

但无济于事。所以我想知道:如何让单元测试环境知道通过清单链接的 COM?对我来说,似乎 DLL 清单链接不太工作(EXE 清单工作正常),但通常这些想法等于做错事......

我通常在搜索这样的东西方面非常成功,但是在这个上,我的点击率很少,没有类似的东西,所以请,如果你有任何想法或意见,请分享:)需要,请告诉我。

(我知道,COM dll 的使用可能可以通过在正确的位置进行一些依赖注入来避免,但现在我想探讨一下有关单元测试并行设置的案例)。

亲切的问候

杰斯珀

4

1 回答 1

0

我不熟悉 MS 单元测试,所以这只是猜测。

在您的正常应用程序设置中,您已经通过应用程序清单引用了 COM 服务器清单,因此一般的“进程激活上下文”包括正确的引用。

在单元测试场景中,您无法控制应用程序,因此流程激活上下文没有正确的引用。您已将测试 dll 清单嵌入到您的 DLL 中,但除非您做额外的工作,否则所做的一切就是允许针对清单解析静态 DLL 依赖项。只要您的 dll 代码处于活动状态,清单激活上下文就不是“活动的”;您必须自己管理此上下文,方法是手动创建和激活您对 COM 服务器的调用的上下文。

例如,请查看CodePlex 上OneCode项目中的 CSRegFreeCOMClient。

于 2010-11-24T06:46:11.580 回答