由于服务器兼容性问题(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. 在VS 2010编译C代码
- 2. VS代码SCSS自动编译为CSS
- 3. 在vs 2005中编译c代码
- 4. VS代码如何支持ES6代码
- 5. 支持遗留代码,无需访问编译后代码
- 6. GMP-汇编代码?编译代码
- 7. 编译vhdl代码
- 8. 编译C代码
- 9. 代码不编译
- 10. 编译代码生成 - 条件块内部的寄存器分配
- 11. Eclipse CDT:在一个代码库中管理条件编译(#ifdef)
- 12. 有条件的调试 - 它仍然编译成RELEASE代码吗?
- 13. 反编译预编译源代码ASP.NET
- 14. 用C++编译器编译c代码
- 15. 在ubuntu中编译/编译源代码
- 16. 编译错误的代码的编译
- 17. GWT条件编译
- 18. MSBuild条件编译
- 19. gcc条件编译
- 20. 条件JIT编译
- 21. $编译vs $ componentController
- 22. 反编译代码更改代码
- 23. 反编译OCaml字节代码文件
- 24. 将C++ 11代码编译为MATLAB mex文件的一部分
- 25. VS C++编译器应该如何处理这段代码?
- 26. C++代码记录:doxygen vs内置于vC++编译器
- 27. 构建快照vs本地编译代码的参数?
- 28. 为什么这个代码在VS编译? (“额外”逗号)
- 29. 无法在VS 2010中编译.CS代码
- 30. 针对iPhone的汇编程序(.s)代码的条件编译 - 如何?
现在是不是2000年不再支持?我知道我们的基础设施人员在这种担忧之下很容易摆脱它。 – Joe 2009-06-19 02:13:18