【发布时间】:2017-12-05 20:53:02
【问题描述】:
我在 C# 中有一个 COM 可见 类(标记为 [ComVisible(true)] 并在 RegAsm 中注册),我想对其进行单元测试。
我的程序集是一个未签名/弱命名的 dll(它必须保持这个)。我要测试的类有一个 COM 不可见的 私有成员。
我的问题是,当我想在测试中实例化此类时,它会失败并显示以下消息:
测试方法 %MyTestMethod% 抛出异常 System.EnterpriesServices.RegistreationException:程序集 %MyAssembly% 没有强名称。
那么如何在未签名/弱命名的 dll 上使用单元测试框架?
using System.EnterpriseServices;
using System.Runtime.InteropServices;
[ComVisible( true )]
public class MyComClass: ServicedComponent, IMyClass
{
//SomeAttribute
private MyNonComClass nonCom;
public MyComClass( MyNonComClass _nonCom )
{
this.nonCom = _nonCom;
}
}
【问题讨论】:
-
单元测试不应该尝试注册 [ComVisible] 程序集,您没有留下任何痕迹来解释这是如何发生的。考虑 Project > Properties > Build 选项卡,“Register for COM interop”复选框。它不会反对未签名的程序集。但请注意,VS 必须提升运行。不将程序集部署到用户机器上的 GAC(需要强名称)是一个非常糟糕的主意。 COM 存在非常严重的 DLL Hell 问题,因为注册是机器范围的。
-
很抱歉造成混淆。我修改了我原来的描述,希望它有一些提示。
-
ServicedComponent 的 MSDN 文档非常明确:“要将此类部署为已配置的 COM 组件,您必须生成强密钥”
标签: c# unit-testing com