为什么C#需要注册COM DLL才能引用它?

时间:2014-07-14 18:42:41

标签: c# com com-interop tlbimp

为了在C ++中使用COM .dll,我在编译时需要的是#import TLB(或提取TLB的DLL),我已经准备好了。为什么C#需要注册DLL(免注册COM与注册相同)才能编译?为什么TLB不够用?

请注意我的问题是关于使用COM对象编译.dll。我理解为什么必须在运行时注册该对象。

1 个答案:

答案 0 :(得分:3)

首先,与C ++编译器或许多其他可以读取类型库的编译器不同,CLR和.NET编译器实际上都不会读取类型库。它们都依赖于 interop 库,这是一个从类型库生成的.NET程序集。它只包含从tlb反编译的声明,其格式是CLR和编译器都能理解的。

执行此操作的主要工具是Tlbimp.exe,类型库导入程序。

运行Tlbimp.exe并不是一项严格的要求,尽管您考虑在构建服务器上执行此操作。 IDE还支持从“添加引用”对话框中浏览已注册的类型库。添加到项目的项目包含注册表项,而不是类型库名称。 <ResolveComReference> MSBuild任务从注册表信息生成互操作程序集。

这样做的主要优点是现在可以轻松自动生成清单条目,因此可以在不注册的情况下使用COM服务器。 Aka&#34; reg-free COM&#34;。需要注册表信息才能提供清单条目。只需将Isolated属性设置为True即可启用此参考。 非常可取。