2012-04-18 37 views
0

我有共享/使用Common.dll的(遠遠多於)兩個SharePoint包被部署到單個SharePoint實例使用的相同GAC。共享程序集從產品部署演變爲產品部署,並不被視爲產品本身。它本身沒有發佈。它僅在其他SharePoint產品/軟件包的環境中發展。通過各種SharePoint軟件包部署不同版本的常用程序集?

常見程序集主要只是一個高度可重用代碼的存儲庫。它僅供內部小型開發人員使用。

分支/合併允許各種產品在適合開發人員時採用最新版本的Common.dll。每個產品的開發工作都會安排採用新版本Common.dll的風險。

我的需求是讓這些程序集在產品之間獨立運行 - 從SharePoint程序包到SharePoint程序包。

但是,這並沒有發生。相反,每次部署時,都會在GAC中覆蓋Common.dll,以至於所有使用它的產品都會收到此最新版本的Common.dll的行爲。取決於該行爲是什麼,它可以打破一段時間內尚未部署的產品。

我試圖阻止該部署「驚喜!」可能不必將Common.dll視爲公共產品,必須小心避免重大更改/等。

將各種SharePoint軟件包部署到單個SharePoint實例的GAC時,您使用什麼技術來保留常見程序集的不同版本?

+0

Common.dll的每個版本是否使用4部分名稱中的不同版本進行編譯? – 2012-04-18 21:05:05

+0

@RichBennema這是否回答您的問題?:在部署之間更改依賴項程序集的AssemblyVersion屬性後會導致SharePoint Web部件運行時錯誤。所以,我們Common.dll的AssemblyVersion永遠不會改變。 – lance 2012-04-18 21:34:33

+0

是的。在GAC中安裝多個版本的Common.dll,每個版本都有不同的版本號,這是我所建議的。 – 2012-04-19 12:08:30

回答

0

我們在公共集會的Visual Studio項目的預生成事件使用這個命令:

if not "$(SolutionName)" == "ABC" if not "$(TargetFileName)" == "$(ProjectName).$(SolutionName).dll" exit 1 

此版本前命令不必改變,因爲共同的組件被通過各種產品消費。當你用共同組裝的解決方案文件的名稱替換「ABC」,它讀起來就像這樣:

如果我們編譯在自己的解決方案中常見的組件(這是罕見的,但它發生) ,有 什麼都不考慮 - 編譯!否則,除非有人根據使用產品的Visual Studio 解決方案文件名稱將 重命名爲常用程序集,否則將無法進行構建。

爲了避免生成失敗,我們在將其分支到消費產品的代碼庫(通過常見裝配項目的屬性頁面)後重新命名公共組件。常見程序集項目名稱而不是在解決方案資源管理器中進行了更改,其默認名稱空間在其「屬性頁」中也未更改。只有「程序集名稱」更改。因此,除了產品特定的更改外,維護和使用通用代碼始終感覺很熟悉:解決方案資源管理器和命名空間保持不變,無論您正在開發的產品如何。

重命名更改常用程序集項目文件中的一行,當您合併回幹線(和/或更高版本,將幹線合併到其他產品中時)時會產生摩擦。

如果常見的項目文件做它的方式進入產品B的代碼庫,同時還命名其產品A裝配,其預生成命令將阻止編譯在產品B,在那裏開發者可以很容易地改變了「集結號名」以允許編譯。這種摩擦機會增加了你融合得越多。

每次新的SharePoint產品到達GAC時,常用程序集都會在GAC中獲取唯一的名稱(和實例)。各種產品可以使用,演進和部署通用組件,而無需擔心在部署時突然打破其他產品/包裝。

+0

當突然改變項目'A'和'B'而不是'C'所需的「通用」程序集時會發生什麼? – 2012-04-20 06:17:00

+0

在ProjectA中進行更改。合併到主幹中。合併到項目B的通用主幹。不要將主幹合併到ProjectC中。我忽略了什麼? – lance 2012-04-20 15:46:19

+0

在我看來,這種方法現在換了一些與版本相關的痛苦,現在對於該項目組的生命中持續的源控制疼痛。版本控制的疼痛可以很容易地自動化(我的答案中有更多的細節)。隨着時間和項目數量的增加,源頭控制的痛苦可能會變得更糟。 – 2012-05-02 03:16:21

0

版本控制和binding redirects也許能夠在這裏提供幫助。根本問題似乎是由Visual Studio缺乏對強名稱的一致標記。與其創建一個涉及源代碼管理的詳細解決方法,創建一個簡單的工具可以更新給定項目文件中的所有常用程序集引用可能會更好。這解決了根本問題,而不會產生其他不必要的成本。

+0

考慮綁定重定向選項:是不是會在ProductA中的Common和CommonB中的Common(Common的兩個分支)之間的csproj文件之間創建彙編版本差異?如果是這樣,那麼在某些時候不需要合併(回到Common的後備箱)? – lance 2012-05-02 14:16:57

+0

經過一番研究:配置程序集重定向時,我對SharePoint的Web上下文所做的更改會被SharePoint的非Web進程(例如計時器作業..和工作流?)忽略。進一步的配置工作可以(我認爲)也將重定向應用於這些進程。 – lance 2012-05-02 14:20:25

相關問題