TLB在部署时没有Regsrv32来管理.NET程序集

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

然而,这在开发时不是问题; 我在生产中使用托管实例,并且在部署时手动注册DLL将是一个痛苦,如果不是不可能的话。 有没有办法在部署期间不需要注册步骤的方式使用托管DLL程序集?

我一直在互联网上阅读,并使用app.manifest找到了一些关于免注册COM的文献。 这可行吗?

如果类型库也嵌入了你应该使用的第三方COM DLL,那么确实可以使用隔离COM (你可以用OleViewvalidation它)。 使用VS2010 / 2012时,以这种方式使用COM DLL非常容易。 DLL必须在开发机器上注册。 然后,您只需将其添加为.NET项目的引用,并打开其Embed Interop TypesIsolated属性:

在此处输入图像描述

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

考虑客户端应用程序的COM公寓模型非常重要。 您应该没有STA客户端的问题。 但是对于MTA模型,默认的基于类型库的编组器可能不适用于由隔离DLL创建的COM对象( 此处更多内容)。 如果DLL附带COM代理/存根代码,这也不应该是一个问题。

可悲的是没有。 您的目标DLL是一个COM DLL,因此必须在它部署到的每个盒子上注册。 假设您正在构建用于部署的安装包,那么好消息是,大多数值得他们使用的安装程序工具集应该支持开箱即用的COM注册。 检查安装人员的文档。

如果您通过xcopy部署到大量的盒子,我会说是时候重新考虑您的策略了。 您可能采取的唯一安慰是,每个版本部署时,每个盒子只需注册一次COM DLL。 但是,如今, xcopy安装通常是一个坏主意。

更新:我的立场得到纠正 – 我正在投票支持Noseratio。 显示这些天我很少关注COM集成。