代码之家  ›  专栏  ›  技术社区  ›  DannyT

如何在.NET版本上演变.NET代码库

  •  8
  • DannyT  · 技术社区  · 17 年前

    我有一组很久以前开发的.NET组件(1.1)。我想继续为任何需要该版本的客户机提供1.1版本,但也提供版本-在某些情况下是相同的代码,在某些情况下是增强的-用于.NET 2和.NET 3(.5)。在以后的每种情况下,我可能都希望利用平台的更新特性来支持某些组件。

    我正在寻找在这种情况下最佳实践的指导。

    如果我不想 任何 对组件所做的更改,那么我想我仍然可以将其作为1.1提供,而以后的库/应用程序可以按原样使用1.1程序集。我怀疑仍然有充分的理由提供用.NET的较新版本构建的程序集(例如性能),但我的理解是 能够 只需提供1.1。这是正确的吗?

    在我希望让组件的大部分代码与1.1一起工作的情况下,还要为.NET的较新版本添加功能,什么是最好的方法?

    • 单独的代码分支
    • C预处理器
    • 为.NET 2+版本提供单独(新)类中的功能,并使用原始的via,例如composition
    • 其他一些我还不知道的高级.NET技巧

    此外,对于如何处理大会签字的任何建议都将非常感谢。

    提前谢谢

    4 回复  |  直到 17 年前
        1
  •  11
  •   John Saunders    17 年前

    在我相当严厉的观点中,现在已经不是停止支持.NET 1.1的时候了。我能想到的仍然使用.NET 1.1的唯一好理由是,如果您仍然需要支持.NET 2.0不支持的硬件,那么到目前为止,我不确定我们是否可以将其称为一个好理由。

    事实上,除了硬件支持,我不认为我听说过任何关于机器不升级到.NET 3.5 SP1的有效原因。就.NET 2.0应用程序而言,.NET 3.5 SP1只是.NET 2.0 SP2。你一定会想知道为什么有人不想实现一个服务包,这个服务包已经存在了将近一年了。

    .NET 3.0和.NET 3.5的其余部分都是附加程序集,它们对不使用它们的代码没有影响。

    因此,我将平衡我为所有客户服务的愿望与支持.NET 1.1的持续成本。也许你会继续支持它,但是需要额外的支持,以及 许多 更多新功能。在较小程度上,与.NET 2.0相同。

    另一个更为怀尔德的想法是:我们是否继续支持.NET 1.1公司,就好像这样做没有额外的费用一样?我们真的帮他们把头埋在沙子里有什么好处吗?即使他们太忙而看不见,也不可能很快就会有一些初创企业开始与他们竞争并赢得大量业务,这不是因为他们是一家更好的公司,而是因为他们使用的是WCF、ASP.NET MVC和AJAX,以及.NET 1.1用户梦寐以求的所有酷功能。

        2
  •  3
  •   Marc Gravell    17 年前

    我为.NET 2.0,.NET 3.0,.NET 3.5 CF 2.0,CF 3.5,Mono 2.x和Silverlight 2.0维护一个项目-我使用项目(构建)文件和if指令的组合来最大限度地减少/本地化重复代码的数量。

    大多数情况下,我输出相同的DLL——尽管我已经创建了一些3.5特定的DLL来涵盖扩展方法等内容。

    一项重要的工作是确保您设置了它,这样您就可以快速地构建/测试它们——例如,我有一个单独的“build.bat”,它将检查它是否在所有的编译中编译(引入非法语法真的很容易)。

    对于1.1,我想您可以使用msbee,但是您可能需要一个“csc”-但是有一些相当基本的更改(例如没有泛型),所以它可能更难达到一个数量级…

        3
  •  2
  •   Dave Markle    17 年前

    这是构建文件非常重要的地方。我不使用预处理器,而是使用 MSBuild (查找) MSBee 用于使用msbuild编译.NET 1.1代码)以创建生成文件,该文件将指定如何生成每个特定于平台的程序集。

        4
  •  1
  •   Troy Hunt    17 年前

    这似乎是一种很快就会变得混乱的事情。您要么最终维护针对不同框架的同一代码库的多个流(在这种情况下,您肯定希望考虑SCM中的分支),要么将功能分解为为为不同框架执行离散任务的类。

    我认为这主要取决于您对代码库未来增长的期望。如果您希望对被取代版本i_d进行有限的更改,只需继续并将大部分新功能扩展到最新一代.NET中,以利用新的语言功能。你的大部分新功能都是3.0和3.5版本的,所以我倾向于尽可能地将客户转移到他们那里;他们使用了新的语言,你的注意力主要集中在构建一个框架上。

    推荐文章