使用C#在Visual Studio 2010中使用预处理程序指令

Pho*_*per 6 c# visual-studio-2010

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

#define DEBUG

... // Other code in my app

#if DEBUG
  myVariable = debugValue;
#endif
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我在发布模式下编译我的应用程序时,myVariable仍然设置为debugValue.这就像我没有正确定义我的预处理器变量或我没有正确配置我的编译器.任何人都可以向我解释我需要做什么,以便在调试模式下编译应用程序时myVariable仅设置为debugValue?

谢谢!

Kyl*_*man 11

如果您使用#define DEBUG指定调试符号,切换到释放模式仍将提供符号,因为您明确定义它.

尝试删除#define DEBUG代码文件中的行.默认情况下,VS定义DEBUGTRACE处于调试模式和TRACE发布模式,因此不必明确定义它们.


Eri*_*ich 9

如果您不了解它,可能需要查看"条件"属性.这允许您装饰方法而不是内联预处理程序指令:

class SomeClass 
{
   public void ProductionOperation()
   {
      //Doin' production stuff
       Log(someProductionVariable);
   }

   [Conditional("DEBUG")]
   public static void Log(string message) 
   {
       //Write to a file
   }
}
Run Code Online (Sandbox Code Playgroud)

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

(如果你要做到这一点,你不希望#defining或者在你的代码的任何地方#undefining了DEBUG变量).


Ste*_*ner 5

DEBUG常量实际上是在项目属性中定义的.转到项目属性 - >构建选项卡 - >定义DEBUG常量.

通过明确声明该常量,您将覆盖由VS声明的那个.