在 C# COM 项目中,我应该引用 DLL 还是 TLB? (主要是 SolidWorks)

In C# COM projects, should I reference DLLs or TLBs? (Mainly SolidWorks)

我正在为 SolidWorks 构建一个 C# 插件,但我似乎找不到关于在我的项目中引用哪些文件的任何明确答案。我在以前的项目中使用了 .DLLs,在这个项目中使用了 .TLBs。特别是对于 SolidWorks,我更喜欢 TLB,因为函数的定义提供了它们实际的 return 类型,而不仅仅是 dynamic,这样我就不必在 SolidWorks 的文档中查找它。然而,在我发现的所有视频和网站中,似乎没有人在使用 TLB。 SolidWorks 的文档站点没有那么有用,因为它到处都是,而且解释非常乏味。

Early and Late Binding 的文档说 TLB 仅用于早期绑定。

This page here 表示 TLB 用于 C++/CLI、VB .NET 和 VBA。没有提到 C#。另一页(现在找不到)显示使用 TLB 而不是 DLL 的代码,但其他人似乎都在使用 DLL。

我实际上应该使用什么?除了 early/late 绑定和 dynamic 之外,(对于 SolidWorks 和一般 COM 东西)有什么区别?

当您添加 tlb 时,它会在后台转换为互操作 dll,因此它与添加 dll 几乎相同,但有一个主要区别。这些互操作不会有强名称,因此您将来可能会遇到兼容性问题,这与强签名的 dll 互操作不同。

我还建议不要使用 'Embed Interop Types' 选项。在这种情况下,您将没有动态,可以使用 I-versions of methods 访问 API 的类型安全版本。

总结:添加互操作 dll(从 .NET 选项卡),将所有 SOLIDWORKS 互操作的 'Embed Interop Types' 选项设置为 False