Com 最佳实践-当实际目的是公开TLB文件时,在何处放置托管程序集

Com 最佳实践-当实际目的是公开TLB文件时,在何处放置托管程序集,com,vb6,assemblies,com-interop,managed,Com,Vb6,Assemblies,Com Interop,Managed,我有一个为特定套件运行托管和非托管可执行文件组合的环境 我有一个场景,其中我拥有托管程序集(在本例中)的唯一原因是因为用C#编写代码比用VB6编写代码更容易 我的“主”应用程序是用VB6编写的,需要调用此程序集。所以我创建了TLB文件,这样它就可以被COM调用了 现在,对于部署,将托管程序集与tlb一起“放置”在windows系统目录中是否更好?把他们都放在同一个地方?在我看来,用这种方式管理似乎更容易一些 或者,托管程序集(未签名,因为它不在不同应用程序之间共享)应该直接转到应用程序目录的BI

我有一个为特定套件运行托管和非托管可执行文件组合的环境

我有一个场景,其中我拥有托管程序集(在本例中)的唯一原因是因为用C#编写代码比用VB6编写代码更容易

我的“主”应用程序是用VB6编写的,需要调用此程序集。所以我创建了TLB文件,这样它就可以被COM调用了

现在,对于部署,将托管程序集与tlb一起“放置”在windows系统目录中是否更好?把他们都放在同一个地方?在我看来,用这种方式管理似乎更容易一些

或者,托管程序集(未签名,因为它不在不同应用程序之间共享)应该直接转到应用程序目录的BIN,并且TLB移动到windows\system32并在那里注册

总的来说,让他们在一起似乎更直接,但这似乎不是正确的做事方式


谢谢你的任何提示

以上都没有。只有在编译VB6程序时才需要类型库。它不需要也不应该部署在用户的机器上。有一个很小的例子,类型库可以帮助跨单元或进程封送接口。VB6应用程序中不会出现这种情况。

以上任何一项都不会出现。只有在编译VB6程序时才需要类型库。它不需要也不应该部署在用户的机器上。有一个很小的例子,类型库可以帮助跨单元或进程封送接口。在VB6应用程序中不会出现这种情况。

就我个人而言,我会将它们都放在应用程序的安装文件夹或
通用文件结构下。

System32
文件夹理想情况下仅用于系统文件。(暂时忽略历史记录:)

就我个人而言,我会将它们都放在应用程序的安装文件夹中,或者放在
公共文件结构下。

System32
文件夹理想情况下仅用于系统文件。(暂时忽略历史:)

请注意,如果COM对象引发您希望在VB中处理(早期绑定)的事件,您仍然必须分发并注册tlb文件。不,这是胡说八道。没有编译器就没有早期绑定。嗯,你不需要注册tlb吗?Regasm xxx.dll/tlb:xxx.tlb/codebase。。它实际上被称为“延迟绑定”。@HansPassant也许是这样,我仍然花了很多时间跟踪本质上是“类型不匹配”的错误,以及在目标机器上注册typelib后立即消失的事件。注销它,它们会再次中断。这不会注册类型库,它只会生成类型库。因此,您的VB6项目可以使用它。Regasm确实注册了[ComVisible]类。因此,您可以调试VB6代码。它们也需要在用户的机器上注册。如果您在VB6代码中实际使用了后期绑定,那么根本没有理由要求Regasm生成类型库。只有在VB6项目中使用Project+引用时才有必要。请注意,如果COM对象引发要在VB中处理(早期绑定)的事件,则必须仍然分发和注册tlb文件。不,这是胡说八道。没有编译器就没有早期绑定。嗯,你不需要注册tlb吗?Regasm xxx.dll/tlb:xxx.tlb/codebase。。它实际上被称为“延迟绑定”。@HansPassant也许是这样,我仍然花了很多时间跟踪本质上是“类型不匹配”的错误,以及在目标机器上注册typelib后立即消失的事件。注销它,它们会再次中断。这不会注册类型库,它只会生成类型库。因此,您的VB6项目可以使用它。Regasm确实注册了[ComVisible]类。因此,您可以调试VB6代码。它们也需要在用户的机器上注册。如果您在VB6代码中实际使用了后期绑定,那么根本没有理由要求Regasm生成类型库。仅当在VB6项目中使用Project+引用时,才需要此选项。