2011-12-12 56 views
0

我有一個C#.NET類庫,我已經通過生成一個tlb在COM中公開。這將用於用戶在Excel VBA中創建自己的功能。我稱之爲'MyLib.dll'和'MyLib.tlb'。如何處理用戶機器中的多個版本的tlb

我們現在處於UAT模式,並部署到用戶機器C:\ UAT [我的應用程序二進制文件]。所以,我註冊我的dll從這個路徑爲regasm C:\ UAT \ MyLib.dll/codebase

但是當我們轉向生產時,我們將部署到C:\ PROD \ [我的應用程序二進制文件]。所以,我將它註冊爲regasm C:\ PROD \ MyLib.dll/codebase

這是行不通的,因爲prod版本會破壞tlb的舊UAT版本。因此,使用我的tlb的UAT版本的用戶分發表單不起作用。另外,未來,我不能用UAT和PROD的不同名稱來釋放庫,因爲代碼庫是相同的,我不能一直更改每個版本的項目或tlb名稱。

如何解決這種情況,或者有什麼方法可以使其工作,其中tlb的名稱和功能是相同的,並且可以基於其部署的路徑工作,或者具有許多版本的常規最佳實踐tlb在同一臺機器上。

很多謝謝。

+1

很難猜測'UAT模式'可能意味着什麼,這聽起來是自我造成的。對於在一臺機器上安裝多個版本的服務器,COM通常是非常不友好的。重命名程序集是你想要做的最後一件事,它改變了自動生成的[Guid]。如果只更改安裝目錄,重命名程序集沒有意義。不要明確重命名或聲明[Guid]。 –

回答

0

我發現所有研究和嘗試後發現,即使從不同的路徑在機器上註冊名稱也不可能有兩個tlbs。在註冊tlb類型時創建的註冊表項使用了containes類型的名稱。因此,即使從不同的路徑運行,我們也無法擁有兩個具有相同名稱和版本的tlbs。希望這可以幫助 !