1

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

我想知道我是否应该在不同的类、方法等中内联两段代码。你怎么看?

4

4 回答 4

2

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

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

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

于 2008-09-17T17:57:04.247 回答
1

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

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

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

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

话虽如此,您应该真正深入了解您想要/需要这样做的原因的核心。

于 2008-09-17T18:00:11.367 回答
0

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

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

于 2008-09-17T17:52:36.283 回答
0

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

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

于 2008-09-17T17:57:59.173 回答