我有一个基础库可以维护多个版本。每当我需要处理另一个版本时,我都会进行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常量。
这是一个众所周知的事吗?我该怎么办呢?
答案 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定义,一个没有),以获得两个输出时所建。
然后添加使用上述项目配置的解决方案配置,并构建它们以检查它们在执行时是否打印出正确的内容。
完成此操作后,您应该拥有一个可以应用于更复杂项目的工作系统(了解这些元素如何相互关联)。要申请他们回来,我建议删除大部分的项目/解决方案配置,然后从头开始重建他们,现在你相信你知道怎么做 - 往往是从第一原理重建这些东西的作品出来不是试图调整了现有的“破越好'恢复生机。