2009-06-18 91 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

我会在上面添加的唯一的事情是,如果您执行分支,请尽早并经常合并您的更改。有一个人负责合并。合并大量数据是痛苦的,少量合并往往不是那么糟糕。