由於服務器兼容性問題(Windows Server 2000和Windows Server 2003生產服務器),我們有一個需要爲.Net 1.1和2.0構建的項目。我正在尋找幫助,以便在條件編譯或分支源代碼管理中的代碼之間作出決定。每個人都有優點和缺點。提前致謝。條件編譯vs分支代碼
回答
有一件事會影響我的解決方案,那就是知道我希望1.1解決方案能夠存活多久,以及它的目的是什麼。如果解決方案處於維護模式,並且不會增加太多新功能,我會選擇單獨的分支解決方案。然後,我會仔細遷移這兩個分支之間所需的更改。
但是,如果它是一個完全成熟的版本,即使不是全部相同的特徵,我也會使用條件編譯路由。否則,您製作的每一張支票在完成之前都必須合併到另一支支票中。
你有多種選擇:
- 寫入最小公分母,即1.1。這應該在.NET 2.0上運行良好。
- 在SVN/CVS 1.1中創建一個傳統分支並單獨維護。
- 使用條件編譯
- 隔離特定於單獨的組件,每個版本的功能,並附帶相應的組件,每個版本
- 嚴肅查處服務器到最新版本的升級。之前我一直處於這個位置,並且我對管理層進行了成本效益分析,並且表明執行雙版本比升級要花費更多的錢。
+1爲升級的好處 – rmeador 2009-06-18 21:25:39
肯定會通過條件編譯進行分支(並儘可能將其隔離到特定模塊中)。
分支意味着如果您在代碼的不相關部分(即獨立於.Net版本的代碼)中發現錯誤,則必須在兩個分支上修復它。如果你不需要,不要走這條路。
我更喜歡使用抽象基類(ABC),它定義了一個接口和特定於平臺的派生類,與工廠對象/方法和整個文件條件編譯一致以解決這些問題(我有一個在Win32和X11上工作的GUI庫以這種方式實現)。
無償分支從來不是好事!
分支通常是一場噩夢(重複的努力和合並問題比比皆是)。恕我直言,它應該只用於你永遠不會期望與主分支保持同步的死衚衕分支(即你不希望對舊分支作出許多更改,也許只有主要的最重要的bug修復科)。
條件編譯允許您在代碼中看到「並排」的差異,當您開始更改#if內的某些內容時,您還需要考慮#else部分,這一點很明顯。
條件編譯只會給你帶來麻煩。條件編譯使用#IFDEF宏拋棄代碼。它暗示程序員在不存在的地方強制抽象。假設你想創建一個泛型類,現在你想讓它與.NET 1兼容,所以你需要在所有演員操作中使用ifdefs。你必須咬的子彈是在兩個分支中解決問題(如果出現的話),希望你不會寫太多的錯誤:)
分支允許您選擇使用共享程序文本文件.CS來自兩種不同的解決方案在.NET 1和2之間沒有區別的情況下的不同平臺。
我會在上面添加的唯一的事情是,如果您執行分支,請儘早並經常合併您的更改。有一個人負責合併。合併大量數據是痛苦的,少量合併往往不是那麼糟糕。
- 1. 編譯python代碼vs py2exe
- 2. 編譯器的條件隱藏代碼
- 3. VS代碼條件片段
- 4. 在VS 2010編譯C代碼
- 5. 在vs 2005中編譯c代碼
- 6. VS代碼SCSS自動編譯爲CSS
- 7. VS代碼如何支持ES6代碼
- 8. 支持遺留代碼,無需訪問編譯後代碼
- 9. 編譯的二進制文件VS解釋的代碼python
- 10. 條件編譯
- 11. 有大量代碼文件的C++條件編譯
- 12. GMP-彙編代碼?編譯代碼
- 13. 在MEX編譯跳過代碼部分
- 14. 編譯Yacc代碼
- 15. C代碼編譯
- 16. 編譯vhdl代碼
- 17. 編譯C代碼
- 18. 代碼不編譯
- 19. 編譯代碼生成 - 條件塊內部的寄存器分配
- 20. 反編譯彙編代碼
- 21. 如何有條件地編譯emscripten的代碼?
- 22. Java編譯器代碼優化違反條件?
- 23. C++宏來有條件地編譯代碼?
- 24. 共享嵌入式框架中的條件編譯代碼
- 25. 有條件的調試 - 它仍然編譯成RELEASE代碼嗎?
- 26. Eclipse CDT:強制索引條件編譯代碼
- 27. Eclipse CDT:在一個代碼庫中管理條件編譯(#ifdef)
- 28. 用C++編譯器編譯c代碼
- 29. 編譯錯誤的代碼的編譯
- 30. 反編譯預編譯源代碼ASP.NET
現在是不是2000年不再支持?我知道我們的基礎設施人員在這種擔憂之下很容易擺脫它。 – Joe 2009-06-19 02:13:18