VS2008:带有定义的多个构建配置无法按预期工作

时间:2010-11-17 08:14:23

标签: c# visual-studio-2008 conditional-compilation buildconfiguration

我有一个基础库可以维护多个版本。每当我需要处理另一个版本时,我都会进行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 *项目配置中都会检查定义DERBUG常量。

这是一个众所周知的事吗?我该怎么办呢?

2 个答案:

答案 0 :(得分:0)

C#中的条件编译与C和C ++不同。有关ConditionalAttribute课程的信息,请参阅here

例如:

doDebugOutput();    // unconditionally call the optional code

Conditional["DEBUG"]
void DoDebugOutput()
{
  // do expensive debug-only output here
}

答案 1 :(得分: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”,“Debug版本2”),看看你能不能设置它们(一个VERSION1定义,一个没有),以获得两个输出时所建。

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

完成此操作后,您应该拥有一个可以应用于更复杂项目的工作系统(了解这些元素如何相互关联)。要申请他们回来,我建议删除大部分的项目/解决方案配置,然后从头开始重建他们,现在你相信你知道怎么做 - 往往是从第一原理重建这些东西的作品出来不是试图调整了现有的“破越好'恢复生机。