如何为不同版本的.NET编写具有唯一部分的代码
时间:2020-03-05 18:59:31 来源:igfitidea点击:
我的源代码需要同时支持.NET版本1.1和2.0 ...如何测试不同的版本以及解决这种情况的最佳方法是什么。
我想知道我是否应该在单独的类,方法等中内联代码的两个部分。我们如何看待?
解决方案
回答
我会问为什么我们必须维护两个代码库,如果可能的话,我会选择一个并继续使用。
试图使两个代码库与更改数量和更改类型保持同步是非常复杂的,并且为这两个版本构建的构建过程将非常复杂。
回答
这里有很多不同的选择。在我工作的地方,我们使用#if pragma,但也可以使用单独的程序集来完成不同的版本。
理想情况下,我们至少应将版本相关的代码保留在单独的部分类文件中,并在编译时提供正确的版本。如果可以让我回到过去,我会强制执行此操作,我们的代码库现在有很多#if pragma,有时可能很难管理。整个#if杂乱情况中最糟糕的部分是Visual Studio只会忽略任何无法使用当前定义进行编译的内容,因此检查重大更改非常容易。
NUnit同时支持1.1和2.0,因此是测试框架的不错选择。使用NAnt之类的东西进行单独的1.1和2.0构建,然后自动运行NUnit测试并不是很困难。
回答
我们遇到了这个问题,最后得到了一个"兼容性层",在其中为.NET v1.1和v2.0实现了一套接口和实用程序代码。
然后,我们的安装程序为正确的版本设置正确的代码。我们使用了NSIS(免费!),它们具有可以调用以确定.NET版本的功能。
回答
如果我们想做这样的事情,我们将需要使用预处理程序命令和条件编译符号。
我将使用能清楚指示我们要定位的.NET版本的符号(例如NET11和NET20),然后包装如下相关代码:
#if NET11 // .NET 1.1 code #elif NET20 // .NET 2.0 code #endif
这种方式而不是简单的if / else的原因是在有人忘记定义符号的情况下的额外保护层。
话虽这么说,我们应该真正深入了解我们想要/需要这样做的原因。