如果在Visual中调试,下面的代码将打印字符串。
#if DEBUG
Console.WriteLine("...In visual studio...");
#endif如果在...\bin\Debug的指导下运行编译的exe文件,它会打印字符串吗?
发布于 2018-09-24 21:27:26
所有#...指令都由编译器处理。它们是,而不是最终.exe文件中的。它们是,而不是运行时执行的。
这意味着,在这种情况下,最重要的是,编译时的状况是什么。如果将.exe构建为调试生成,则定义了DEBUG常量,因此.exe文件将包含Console.WriteLine("...In visual studio...");行的代码。当您运行此.exe文件时,无论何时、何地或如何,它都会将该行输出到控制台。
另一方面,如果将应用程序构建为发行版构建,则不会定义DEBUG常量,编译器也不会将行添加到.exe文件中。无论您做什么,您都不会让.exe文件打印您的行。如果使用反编译器查看.exe文件,您甚至不会在其中找到字符串"...In visual studio..."。这就好像你一开始就没有写过这一行。
发布于 2018-09-24 21:17:45
在哪里运行应用程序并不重要,重要的是如何构建应用程序。当您选择调试构建时,编译器声明DEBUG常量,当您运行exe时,将执行if分支,因为该常量是声明的。
在Visual中,您可以通过将Build选项卡置于Project Properties下来查看声明的常量,如果在此期间尝试将构建模式更改为Release,则可以看到“定义调试常量”将自动被选中。
https://stackoverflow.com/questions/52487438
复制相似问题