用c#在Visual Studio 2010中使用预处理器指令

本文关键字:预处理 处理器 指令 2010 Visual Studio | 更新日期: 2023-09-27 18:10:36

我有一个c#应用程序,我正在用Visual Studio 2010构建。为了帮助我在应用程序中完成一些日常任务,如果我在调试模式下编译应用程序,我想设置一些值。当然,我认为预处理器指令将是一个好主意。我的问题是,我不太明白如何使用它们。此时,我的代码块看起来像这样:

#define DEBUG
... // Other code in my app
#if DEBUG
  myVariable = debugValue;
#endif

我的问题是,当我在发布模式下编译我的应用程序时,myVariable仍然被设置为debugValue。这就像我没有正确定义我的预处理器变量,或者我没有正确配置我的编译器。有人能向我解释一下我需要做什么,这样myVariable只被设置为debugValue当我在调试模式下编译应用程序?

谢谢!

用c#在Visual Studio 2010中使用预处理器指令

如果您使用#define DEBUG来指定调试符号,切换到发布模式仍然会提供该符号,因为您显式地定义了它。

尝试删除代码文件中的#define DEBUG行。VS默认在调试模式下定义DEBUGTRACE,在发布模式下定义TRACE,所以没有必要显式定义它们

如果您不知道,您可能想检查一下"Conditional"属性。这让你可以修饰一个方法,而不是内联预处理器指令:

class SomeClass 
{
   public void ProductionOperation()
   {
      //Doin' production stuff
       Log(someProductionVariable);
   }
   [Conditional("DEBUG")]
   public static void Log(string message) 
   {
       //Write to a file
   }
}

如果在调试模式下编译,则log方法将写入文件。如果在发布模式下编译,则条件方法变为无操作。这里唯一要记住的是,条件代码将进入您的程序集,而不像您使用预处理器抢占它—这是运行时的区别。但是,只要您不介意,我发现这样可以使代码更简洁。

(如果您打算这样做,您不希望在代码中的任何地方#定义或#取消定义DEBUG变量)。

DEBUG常量实际上是在项目属性中定义的。进入项目属性->构建选项卡->定义DEBUG常量。

通过显式声明该常量,您将覆盖VS.声明的常量。

给Kyle和Steve的回答补充一点…

如果你用文本编辑器打开你的。csproj文件,你可以看到配置的Debug和Release是如何定义符号的。

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
    ...
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    ...
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    ...
    <DefineConstants>TRACE</DefineConstants>
    ...
  </PropertyGroup>

使用

设置活动配置
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>

但是正如Kyle已经提到的,你的代码实际上是将它添加到所有配置中。