c# - TLB 到部署时没有 Regsrv32 的托管 .NET 程序集

标签 c# .net com-interop regsvr32 typelib

我有一个作为第三方 API 的一部分提供的 TLB。我使用 TLBIMP.exe 生成 DLL 程序集包装器。但是,在开发时,程序集似乎需要注册 regsvr32 才能使用。

但这在开发时不是问题;我在生产中使用托管实例,如果在部署时手动注册 DLL 不是不可能的话,那将是一件很痛苦的事情。有没有一种方法可以在部署期间以不需要注册步骤的方式使用托管 DLL 程序集?

我一直在 Internet 上浏览并找到了一些关于使用 app.manifest 的免注册 COM 的文献。这可能是一个可行的解决方案吗?

最佳答案

如果类型库也嵌入到您的第 3 方 COM DLL 中,Isolated COM确实可以用于此(您可以使用 OleView 验证)。使用 VS2010/2012 以这种方式使用 COM DLL 非常容易。 DLL 必须在开发机器上注册。然后您只需将其添加为对您的 .NET 项目的引用并打开其 Embed Interop TypesIsolated 属性:

enter image description here

互操作程序集将与使用的 .NET 程序集合并,您只需确保在部署时将 COM DLL、.NET 程序集和生成的 .manifest 文件一起复制.

考虑客户端应用程序的 COM 单元模型非常重要。使用 STA 客户端应该没有问题。但是对于 MTA 模型,默认的基于类型库的编码器可能不适用于由独立 DLL 创建的 COM 对象(更多关于此 here)。如果 DLL 带有实现的 COM 代理/ stub 代码,这也应该不是问题。

关于c# - TLB 到部署时没有 Regsrv32 的托管 .NET 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18498633/

相关文章:

c# - SQL Server 中的货币

c# - 如何在C#中获取已启动应用程序的PID

c# - 如何使用在 C# 中创建的控件作为 VB6 中的窗体

c# - 向 DataGridTextColumn 添加事件或命令

c# - 如何使用 Nunit 断言每个集合项

c# - 在 N 层 WCF MVC 应用程序中实现对象更改跟踪

c# - 传递 DataTypeEnum

c# - 如何将常规文本附加到已经具有绑定(bind)到其文本属性的 TextBlock?

c# - 当要滚动的项目太多时,Windows 窗体列表框会溢出

c# - 带有 COM 接口(interface)的 MFC Dll