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

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

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

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

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

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

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

转载注明原文:为什么C#需要注册COM DLL才能引用它? - 代码日志