2009-12-14 111 views
4

我們有3個軟件產品使用相同的.net dll(代碼+遺留)。
所有這些使用3/4 dlls中存在的常見功能。.Net Assembly/dll共享和部署

我想知道如何以及在哪裏部署這些dll。
而這是做這件事最標準的方法。

S1]隨着其安裝目錄每個產品 - 做也許最簡單的方法。 (但是如果有任何更新將發生在共享dll ..它必須完成所有3個dll。)

S2]把它放在通用文件夾?

S3] System GAC是否對此有所幫助?
(把所有3 GAC和代碼是shared.but IM擔心版本?)

而且如何建立這樣的項目部署設置:

D1]收拾所有DLL在一個setup.each安裝程序有其自己的副本。
但假設有人安裝軟件A,則對於軟件B,共享文件已存在於系統中。

D2]在一個單獨的安裝部署共同文件,並與each.try包來檢測,如果文件已經存在,如果是不部署(這仍然犯規幫助裝備尺寸)
公共文件夾 - 它應該是GAC或一些系統上的文件夾? 涉及複雜的設置,因爲它需要檢查不同共享文件的版本。

此外,假設軟件的更新版本將被髮布並且它必須與舊版本共存。
如何在多個版本之間保持兼容性?

+0

目前面臨的問題與幾個錯誤修復和版本問題。 當前使用GAC處理常見文件並打包每個產品中的所有dll。對GAC的部署令人頭痛。 – Amitd 2009-12-14 12:58:29

回答

0

我會去 「S1」 + 「D1」,或 「S1」 + ClickOnce的;它支持簡單的部署和版本控制,併兼容ClickOnce部署,xcopy部署,MSI部署,web等.GAC不適合IMO。重新更新;那麼,你會想單獨測試/發佈它們,不是嗎?我在構建服務器上配置了一個級聯構建,因此,如果我更新庫DLL,它會逐漸升級並重新構建使用該DLL的所有內容(在任何人說:是,它會檢測並消除循環)。

「共同文件」的方法與DLL解析問題,所以本身是一個真正的PITA。

GAC的方法是有效的,但很多不必要的努力,而且相當痛苦,以節省一些重複的DLL。如果您需要部署到非管理員,這也是一個痛苦。

0

將所有內容放入應用程序文件夾中。只有在您確實需要分享大量代碼並且不會一直更新時才加入GAC。

+0

哪個應用程序文件夾?這裏的問題是他有3個應用程序都使用相同的DLL .... – cjk 2009-12-14 13:46:48

0

的GAC是你想要的代碼,以確保只有一個的每個版本的副本的地方。不要擔心使用GAC進行版本控制,因爲它可以爲您處理多種版本的庫。

但總體除非該庫將被用到了很多我會傾向於與恩古的回答一致,並把它們放在你的應用程序文件夾。這也會使部署變得更容易一些。

2

S1 + D1當然。關於「如果有更新......」:這是一個好處,而不是一個問題。如果更改裝配體,則必須重新構建使用的項目。 S1方案可讓您逐項執行該項目,而不會在它們之間產生不必要的依賴關係。

請勿將GAC用於小型圖書館,這很麻煩。

+0

一個圖書館是相當大的..所有許可的東西etc.but但問題是 許可條款不斷變化經常通過。這3種產品。 – Amitd 2009-12-15 05:35:38

1

如果您的版本計劃得當,那麼將dll放入GAC是一個不錯的選擇。與此相反,如果您要添加任何小功能,然後發佈產品,那麼GAC根本無法擴展,因爲那樣您必須製作所有產品的並行版本,我認爲這是不可能的。此外,GAC用於存儲所有使用這些DLL的產品具有通用功能的dll。所以你必須確定你爲所有產品提供的功能。這對於爲每個產品添加不同的功能並在GAC中存儲dll並不是一個明智的建議。爲此,你必須對你的版本系統和版本非常精確。