繁体   English   中英

每次升级我的dotNet应用程序使用的COM库时,是否需要重建和重新部署?

[英]Do I need to rebuild and redeploy every time I upgrade a COM library used from my dotNet app?

我有一个使用COM组件的C#.net 2.0 Windows应用程序。 当我添加对此COM库的引用时,Visual Studio 2005会自动添加互操作程序集DLL。

如果经常升级COM组件,我还需要做些什么来保持我的应用程序升级呢? 我是否需要升级互操作DLL? 我是否每次都需要重建和重新部署才能跟上COM升级的步伐?

我不明白100%这个互操作性问题,我只需要最小化每次COM升级的工作。 我每次都需要避免重建和重新部署。 有没有最佳方法来实现这一目标?

我一直在MSDN中阅读高级COM互操作性( http://msdn.microsoft.com/en-us/library/bd9cdfyx.aspx ),但仍然没有明确的答案。

提前致谢

只要组件的COM接口没有更改,您就不需要更新互操作DLL。 因此,它取决于对组件进行何种更改。

发行说明将是明显的信息来源。 如果做不到这一点,那么比较.tlb文件(如果它们与组件一起交付)可能是一种选择。

潜在地,该组件也可能支持多个接口版本,这使得不必立即更新您的应用程序。

并且找不到有问题的COM的任何tlb文件。

它通常嵌入在COM服务器DLL中。 您可以使用Visual Studio,File + Open + File查看并选择DLL。 您将看到TYPELIB节点,资源1是类型库。

您可以通过从Visual Studio命令提示符运行Oleview.exe来反编译类型库。 文件+查看Typelib并选择DLL。 将右窗格的内容复制/粘贴到文本编辑器中并保存。 如果此IDL有任何更改,则必须重建导入库和程序。 不这样做会导致很难诊断包含访问冲突异常和调用完全错误方法的运行时问题。

这很难实现自动化,显然您更愿意让供应商更好地了解有关更改的信息。 在这台服务器上工作的程序员应该非常清楚这需要它。

当我正在使用我可能正在制作大量构建的组件进行COM互操作时,但是COM组件并没有经常更改,那么我将使用TLBIMP制作一个Interop,我只是引用我的互操作,我可以做版本控制(尽管版本的Interop可能需要.NET4)。

将以下所有内容作为批处理文件(单行)并使用适当的tlbimp。

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\tlbimp" 
"C:\pathtocomdll\comcomponent.dll" 
/out:"Interop.mycomponent.dll" 
/asmversion:"1.1.0.0" /keyfile:"\\server\keyfiles\library.snk"  
/company:"my company"  /productversion:"1.1.0.0" 
/copyright:"2013" 
/product:"company product" /namespace:"company.namespace"

如果您使用的COM组件只是升级其版本但不更改其界面,则您不需要重建Interop。 如果您使用.net4,您还可以在项目中嵌入互操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM