0

我有一个基础库来维护多个版本。每当我需要在另一个版本上工作时,我都会进行 SVN 切换。

我的测试应用程序解决方案没有多个版本,所以我认为对于不同的版本,我可以进行多个解决方案/项目配置,为版本定义符号,以便在我的测试中拥有特定于版本的代码。

目前我在测试应用解决方案中有以下构建配置:Debug、Release、DebugV10、ReleaseV10、DebugV15、ReleaseV15。在 *V10 和 *V15 配置中,我为具有特定于版本的测试代码的两个项目创建并选择了相应的 *V10 和 *V15 PROJECT 配置(并非针对所有项目,大多数在解决方案 -Vx 中运行正常的调试/发布配置配置)。

在那些项目配置中,我输入了相应的条件编译符号(VERSION10 和 VERSION15)。

现在在我的项目代码中,我喜欢

#if VERSION10
  // do v1.0 stuff
#elif VERSION15
  // do v1.5 stuff
#else
  // do trunk stuff
#endif

但显然 VS 无法识别这些符号。即使是一个简单的#if DEBUG 不再起作用,在所有 Debug* 项目配置中都会检查所有定义的 DEBUG 常量。

这是众所周知的事情吗?我能做些什么呢?

4

2 回答 2

0

C# 中的条件编译不同于 C 和 C++。有关课程的信息,请参见此处。ConditionalAttribute

例如:

doDebugOutput();    // unconditionally call the optional code

Conditional["DEBUG"]
void DoDebugOutput()
{
  // do expensive debug-only output here
}
于 2010-11-17T19:33:09.347 回答
0

你描述的概念听起来不错。

也就是说,代码使用:

#if VERSION10 ... #endif

和项目配置定义VERSION10

并设置了一个解决方案配置,该配置设置为使用上述项目配置。

只要这些都设置正确,我希望它可以工作。

你说即使#if DEBUG 没有按预期工作的事实表明有些东西很糟糕。

我建议您尝试最简单的情况,以确保您了解如何设置它:创建一个新的最小“hello world”应用程序,它只有简单的代码,可以让您区分版本:

#if VERSION1
  Console.WriteLine("Hello from version 1");
#else
  Console.WriteLine("Hello from version 2");
#endif

然后创建项目配置(“调试版本 1”、“调试版本 2”)并查看是否可以设置它们(一个定义了 VERSION1,一个没有)以在构建时获得两个输出。

然后添加使用上述项目配置的解决方案配置,并构建它们以检查它们在执行时是否打印正确的内容。

完成此操作后,您应该有一个工作系统(了解这些元素如何相互关联),您可以将其应用到更复杂的项目中。要将它们应用回去,我建议删除大部分项目/解决方案配置,然后从头开始重建它们,因为你确定你知道该怎么做 - 通常从第一原则重建这些东西比尝试调整现有的“破碎”效果更好' 设置恢复生活。

于 2010-11-17T22:40:22.403 回答