2012-01-24 53 views
0

我正在Visual Studio 2010/.NET 4中開發一個小程序(一個dll),它通過COM interop與外部應用程序(我們稱之爲ExApp)集成。我使用TlbImp.exe自己生成互操作程序集,因爲外部應用程序沒有提供任何操作。 ExApp有三個流行版本,每個版本都有一個完全相同的API,但每個版本都有一個不同的(和不兼容的)生成的互操作DLL。目前,這意味着我有三個單獨的安裝:Windows安裝程序可以根據外部應用程序的版本部署程序集嗎?

  • 安裝W/my.dll內置/對Interop.ExApp.dll V1
  • 安裝連接W/my.dll內置/對Interop.ExApp.dll V2
  • 安裝鏈接瓦特/內置my.dll /鏈接到Interop.ExApp.dll v3

必須有一個比這更好的解決方案。

如何配置Visual Studio/Windows Installer以便我只需要安裝一個.exe?這意味着安裝程序將檢測ExApp的版本,並安裝相應版本的my.dllInterop.ExApp.dll

還有一個額外的問題:由於ExApp API未發生有意義的變化,我怎樣才能編譯一個版本的my.dll來與任何已安裝的ExApp版本一起使用?

+1

C#* dynamic *關鍵字或vb.net的後期綁定是COM中的一個選項。否則,安裝程序必須戳註冊表才能查找CLSID密鑰。這是自定義的。 –

回答

1

你爲什麼不建立與3種不同的文件名的互操作性展示,然後創建一個工廠模式在您的應用程序中決定在運行時使用哪個提供程序?

我可以向您展示搜索系統以安裝3個互斥文件之一的方法,但我認爲安裝程序中不屬於這種複雜性。如果有人升級了你正在創建互操作系統的應用程序,它會崩潰。

1

在您的項目的參考,是dll的Specific Version設置爲True或False?如果設置爲True,則可以嘗試將其設置爲False。

這顯然不會阻止新版本的斷裂(API的變化),但是這似乎是目前的情況下無論如何

+0

不幸的是,這不允許my.dll從GAC中提取不同版本的Interop.ExApp.dll。然而,在測試這個想法時,我發現Interop.ExApp.dll v1可以與ExApp v2協同工作,所以這很有幫助。 –

+0

@ScottB我不確定你的意思,只要API相同,應該允許你爲所有3個版本使用你的單個DLL。如果你在這些機器上放置你的dll(特定版本設置爲false),你會得到什麼錯誤? – John

+0

如果我在只有Interop.ExApp.dll v2安裝到GAC的計算機上運行使用Interop.ExApp.dll v1(特定版本設置爲false)編譯的my.dll,則my.dll將因'未找到程序集「而失敗, 。 –

相關問題