簡體   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