2012-12-21 30 views
2

我對COM沒有太多的工作,所以請原諒我的無知。C#應用程序的兩個版本之間的COM麻煩

背景:我正在處理VS 2010中的一個項目。有一個C#COM DLL集成到C#解決方案中,還有一個安裝/部署項目 - 安裝項目設置爲註冊COM .tlb文件安裝。

問題:當有人決定安裝最新版本的C#應用​​程序,因此最新的COM DLL時,以前版本的C#應用​​程序及其COM DLL一起出現在PC上。發生這種情況時,它破壞了C#應用程序的兩個版本的COM功能..或者我正在假設發生了這種情況。

這是典型的COM/DLL-地獄行爲?當兩個C#應用程序都被卸載,然後只有一個被重新安裝,一切都恢復正常 - 兩者顯然不能同時安裝。

我已經嘗試更改了COM DLL項目的GUID,更改了COM DLL項目的AssemblyVersion和AssemblyFileVersion--所有這些都帶有混合結果。當我更改這些項目時,應用程序的新安裝(很好),但現在舊的C#應用​​程序沒有工作功能。

注意:當COM功能失敗時,沒有錯誤或異常拋出 - COM調用似乎什麼都不做。所以它「默默」失敗。

我一直在研究這一點,並嘗試各種修改沒有真正的成功......也許我想這是錯誤的方式。有沒有其他人有更多的經驗可以給我一些見解?

回答

0

您可以使用合併模塊來安裝com對象及其後續版本。這將允許你在同一臺機器上有多個版本。來自Microsoft:

合併模塊就像組件特定版本的快照。爲了避免版本衝突,應該爲組件的每個後續版本創建一個新的合併模塊。

退房此鏈接:Installer vs. Merge Module Recommendations

+0

我想這一點 - 也許我做錯了,但我像以前一樣得到同樣的症狀。合併模塊項目似乎是重新包裝東西以獲得相同結果的一種方式。無論我是否編輯我的程序集版本,程序的舊版本仍然具有明顯缺失的功能。 – stariath

+0

stariath,試試這個:在你的C#應用​​程序中找到com對象的引用並點擊它。在屬性中向下滾動到Isolated屬性並選擇True。重建你的項目。 –