2009-06-18 122 views
1

由於服務器兼容性問題(Windows Server 2000和Windows Server 2003生產服務器),我們有一個需要爲.Net 1.1和2.0構建的項目。我正在尋找幫助,以便在條件編譯或分支源代碼管理中的代碼之間作出決定。每個人都有優點和缺點。提前致謝。條件編譯vs分支代碼

+0

現在是不是2000年不再支持?我知道我們的基礎設施人員在這種擔憂之下很容易擺脫它。 – Joe 2009-06-19 02:13:18

回答

9

有一件事會影響我的解決方案,那就是知道我希望1.1解決方案能夠存活多久,以及它的目的是什麼。如果解決方案處於維護模式,並且不會增加太多新功能,我會選擇單獨的分支解決方案。然後,我會仔細遷移這兩個分支之間所需的更改。

但是,如果它是一個完全成熟的版本,即使不是全部相同的特徵,我也會使用條件編譯路由。否則,您製作的每一張支票在完成之前都必須合併到另一支支票中。

5

你有多種選擇:

  • 寫入最小公分母,即1.1。這應該在.NET 2.0上運行良好。
  • 在SVN/CVS 1.1中創建一個傳統分支並單獨維護。
  • 使用條件編譯
  • 隔離特定於單獨的組件,每個版本的功能,並附帶相應的組件,每個版本
  • 嚴肅查處服務器到最新版本的升級。之前我一直處於這個位置,並且我對管理層進行了成本效益分析,並且表明執行雙版本比升級要花費更多的錢。
+1

+1爲升級的好處 – rmeador 2009-06-18 21:25:39

0

肯定會通過條件編譯進行分支(並儘可能將其隔離到特定模塊中)。

分支意味着如果您在代碼的不相關部分(即獨立於.Net版本的代碼)中發現錯誤,則必須在兩個分支上修復它。如果你不需要,不要走這條路。

我更喜歡使用抽象基類(ABC),它定義了一個接口和特定於平臺的派生類,與工廠對象/方法和整個文件條件編譯一致以解決這些問題(我有一個在Win32和X11上工作的GUI庫以這種方式實現)。

無償分支從來不是好事!

0

分支通常是一場噩夢(重複的努力和合並問題比比皆是)。恕我直言,它應該只用於你永遠不會期望與主分支保持同步的死衚衕分支(即你不希望對舊分支作出許多更改,也許只有主要的最重要的bug修復科)。

條件編譯允許您在代碼中看到「並排」的差異,當您開始更改#if內的某些內容時,您還需要考慮#else部分,這一點很明顯。

1

條件編譯只會給你帶來麻煩。條件編譯使用#IFDEF宏拋棄代碼。它暗示程序員在不存在的地方強制抽象。假設你想創建一個泛型類,現在你想讓它與.NET 1兼容,所以你需要在所有演員操作中使用ifdefs。你必須咬的子彈是在兩個分支中解決問題(如果出現的話),希望你不會寫太多的錯誤:)

分支允許您選擇使用共享程序文本文件.CS來自兩種不同的解決方案在.NET 1和2之間沒有區別的情況下的不同平臺。

2

我會在上面添加的唯一的事情是,如果您執行分支,請儘早並經常合併您的更改。有一個人負責合併。合併大量數據是痛苦的,少量合併往往不是那麼糟糕。