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 Types
和Isolated
属性:
互操作程序集将与消耗的.NET程序集合并,并且您只需要确保在部署时将COM DLL,.NET程序集和生成的.manifest文件一起复制。
考虑客户端应用程序的COM公寓模型非常重要。 您应该没有STA客户端的问题。 但是对于MTA模型,默认的基于类型库的编组器可能不适用于由隔离DLL创建的COM对象( 此处更多内容)。 如果DLL附带COM代理/存根代码,这也不应该是一个问题。
可悲的是没有。 您的目标DLL是一个COM DLL,因此必须在它部署到的每个盒子上注册。 假设您正在构建用于部署的安装包,那么好消息是,大多数值得他们使用的安装程序工具集应该支持开箱即用的COM注册。 检查安装人员的文档。
如果您通过xcopy
部署到大量的盒子,我会说是时候重新考虑您的策略了。 您可能采取的唯一安慰是,每个版本部署时,每个盒子只需注册一次COM DLL。 但是,如今, xcopy
安装通常是一个坏主意。
更新:我的立场得到纠正 – 我正在投票支持Noseratio。 显示这些天我很少关注COM集成。