我应该如何为不同版本的.NET编写具有唯一部分的代码

时间:2008-09-17 17:46:54

标签: c# .net c-preprocessor

我的源代码需要同时支持.NET 1.1版和2.0版...如何测试不同的版本和版本?处理这种情况的最佳方法是什么。

我想知道我是否应该将内联的两段代码放在单独的类,方法等中。你觉得怎么样?

4 个答案:

答案 0 :(得分:2)

这里有很多不同的选择。在我工作的地方,我们使用#if pragma,但也可以使用单独的程序集来完成单独的版本。

理想情况下,您至少会将版本相关代码保存在单独的部分类文件中,并在编译时生成正确的版本。如果我可以回到过去,我会强制执行此操作,我们的代码库现在有很多#if pragma,有时可能很难管理。整个#if pragma事情中最糟糕的部分是Visual Studio忽略了任何无法使用当前定义编译的内容,因此很容易检查中断更改。

NUnit支持1.1和2.0,因此对于测试框架来说是一个不错的选择。使用NAnt之类的东西制作单独的1.1和2.0版本然后自动运行NUnit测试并不是很难。

答案 1 :(得分:1)

如果你想做这样的事情,你需要使用预处理器命令和条件编译符号。

我会使用清楚地表明您所针对的.NET版本的符号(比如NET11和NET20),然后将相关代码包装成这样:

#if NET11
// .NET 1.1 code
#elif NET20
// .NET 2.0 code
#endif

这样做的原因而不是简单的if / else是一个额外的保护层,以防有人忘记定义符号。

话虽如此,你应该深入了解你想要/需要这样做的原因。

答案 2 :(得分:0)

我会问你为什么要维护两个代码库的问题,如果有任何机会,我会选择一个并继续使用它。

尝试使两个代码库与更改的数量保持同步,并且更改的类型将非常复杂,并且为这两个版本构建的构建过程将非常复杂。

答案 3 :(得分:0)

我们遇到了这个问题,我们最终得到了一个“兼容性层”,我们为.NET v1.1和v2.0实现了一组接口和实用程序代码。

然后我们的安装程序为正确的版本设置了正确的代码。我们使用NSIS(免费!),他们有可以调用的函数来确定.NET版本。