如果在Visual Studio中进行调试,则以下代码将打印字符串。
#if DEBUG
Console.WriteLine("...In visual studio...");
#endif
如果直接在...\bin\Debug
的指导下运行编译的exe文件,它将打印字符串吗?
答案 0 :(得分:3)
所有#...
指令均由编译器处理。在最终.exe文件中否找到它们。它们在运行时不执行。
这意味着在这种情况下,重要的是,编译时事物的状态是什么。如果将.exe构建为DEBUG构建,则将定义DEBUG
常量,因此您的.exe文件将包含Console.WriteLine("...In visual studio...");
行的代码。当您运行此.exe文件时,无论何时何地,无论如何,它都会将行输出到控制台。
另一方面,如果您将应用程序构建为RELEASE构建,则不会定义DEBUG
常量,并且编译器也不会将该行添加到.exe文件中。无论您做什么,都不会获得.exe文件来打印行。如果您使用反编译器查看.exe文件,那么您甚至都不会在其中找到字符串"...In visual studio..."
。好像您一开始从未写过该行一样。
答案 1 :(得分:2)
在哪里运行应用程序都无关紧要,重要的是如何构建它。当您选择debug build时,编译器会声明DEBUG
常量,当您运行exe
时,将执行if
分支,因为已声明了常量。
在Visual Studio中,您可以通过转到Build
下的Project Properties
标签来查看已声明的常量,如果您尝试将构建模式更改为Release
,则可以看到“ 定义DEBUG常量”将自动取消选中。