C#中的预处理器无法正常工作

时间:2011-02-22 12:39:19

标签: c# c-preprocessor

#if(DEBUG)
    ......Code......
#else
    ......Code......
#endif

我有一些像这样的代码。如果我的应用程序在调试模式下运行,它应该执行#if(DEBUG)部分,如果它在发布模式下运行,它应该执行#else部分。但无论它运行的是什么模式,它都只执行#if(DEBUG)部分。

使用VS2010的WPF应用程序

任何人都可以帮助我吗?

5 个答案:

答案 0 :(得分:14)

对于调试配置,您的项目设置应如下所示

enter image description here

对于Release,它们看起来应该是这样的

enter image description here

您能否确认是这种情况,如果有,请告诉我们?
如果没有,每种配置有什么用?

答案 1 :(得分:3)

使用所有默认设置创建一个新项目,并检查您是否可以按预期方式工作。如果是这样,您的问题项目必须以某种方式“损坏”,可能是通过在发布配置中定义DEBUG常量,或者为发布解决方案配置选择调试项目配置。

答案 2 :(得分:1)

这取决于您如何创建配置。例如,如果您创建配置并使用debug或release作为模板,则DEBUG或RELEASE将被复制到已定义的constraints元素。它不会将已定义的约束元素(在项目文件中)更改为新的配置名称。

打开项目文件并查找配置部分。确保平台,下面的示例是“PROD”在DefineConstants元素中有一个条目。如果是这样,预编译器指令将无法在代码中按预期工作。

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'PROD|x86'">
  <DefineConstants>PROD;TRACE</DefineConstants>
    <OutputPath>bin\x86\PROD\</OutputPath>
  </PropertyGroup>

答案 3 :(得分:0)

我想在你的项目属性中,在Build下你已经检查了Define DEBUG constant

尝试将配置模式设置为Release并再次运行您的应用程序。 Release的默认值是DEBUG常量未定义,如果你当然没有被篡改的话;)

如果<{1}} 选中,则表示您某处Define DEBUG constant潜伏着。

所以要做两件事。在Release模式下检查选项中的常量,并检查是否有任何手动定义的常量。它应该是其中之一。

答案 4 :(得分:0)

你为什么把DEBUG放在括号之间?

#if DEBUG
    Code
#else
    Code
#endif