代码之家  ›  专栏  ›  技术社区  ›  Sebastian P.R. Gingter

VS2008:具有定义的多个生成配置无法按预期工作

  •  0
  • Sebastian P.R. Gingter  · 技术社区  · 15 年前

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

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

    目前,我在测试应用程序解决方案中有以下构建配置:debug、releasev10、releasev10、debugv15、releasev15。在*v10和*v15配置中,我为两个具有版本特定测试代码的项目创建并选择了相应的*v10和*v15项目配置(并非所有项目都在解决方案-vx配置中运行正常的调试/发布配置)。

    在这些项目配置中,我输入了相应的条件编译符号(版本10和版本15)。

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

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

    但很明显,VS不识别这些符号。即使是一个简单的如果调试不再工作,那么所有debug*项目配置中的define derbug常量都会被检查。

    这是已知的吗?我该怎么办?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Jason Williams    15 年前

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

    也就是说,代码使用:

    #if VERSION10 ... #endif
    

    项目配置定义了 VERSION10

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

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

    事实上,你说即使调试没有按预期工作,也意味着有些东西已经很坏了。

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

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

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

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

    一旦您完成了这项工作,您就应该有一个工作系统(了解这些元素如何相互关联),您可以将其应用到更复杂的项目中。为了重新应用它们,我建议删除大多数项目/解决方案配置,然后重新从头开始构建它们,现在您确定您知道该做什么了——通常从第一原则重新构建这些配置比尝试将现有的“中断”设置重新调整为生活效果更好。

        2
  •  0
  •   Steve Townsend    15 年前

    C语言中的条件编译不同于C和C++。见 here 有关 ConditionalAttribute 班级。

    例如:

    doDebugOutput();    // unconditionally call the optional code
    
    Conditional["DEBUG"]
    void DoDebugOutput()
    {
      // do expensive debug-only output here
    }