猿问

C#if / then调试和发布指令

在“解决方案”属性中,对于我的唯一一个项目,我将“配置”设置为“发布”。


在主例程的开头,我有这段代码,它显示“ Mode = Debug”。我在最上方也有这两行:


#define DEBUG 

#define RELEASE

我在测试正确的变量吗?


#if (DEBUG)

            Console.WriteLine("Mode=Debug"); 

#elif (RELEASE)

            Console.WriteLine("Mode=Release"); 

#endif

我的目标是根据调试与发布模式为变量设置不同的默认值。


当年话下
浏览 508回答 3
3回答

烙印99

删除#define DEBUG代码中的。在该特定构建的构建配置中设置预处理器(DEBUG / _DEBUG应该已经在VS中定义了)。打印“ Mode = Debug”的原因是由于您的原因#define,然后跳过elif。另外,正确的检查方法是:#if DEBUG    Console.WriteLine("Mode=Debug"); #else    Console.WriteLine("Mode=Release"); #endif不要检查发布

UYOU

默认情况下,如果项目是在Debug模式下编译的,则Visual Studio会定义DEBUG,而在Release模式下则不会定义它。默认情况下,未在发布模式下定义RELEASE。使用这样的东西:#if DEBUG  // debug stuff goes here#else  // release stuff goes here#endif如果您只想在发布模式下做某事:#if !DEBUG  // release...#endif另外,值得指出的是,可以[Conditional("DEBUG")]在返回的方法上使用属性,void以使它们仅在定义了特定符号的情况下才执行。如果未定义符号,则编译器将删除对这些方法的所有调用:[Conditional("DEBUG")]void PrintLog() {    Console.WriteLine("Debug info");}void Test() {    PrintLog();

慕码人2483693

我不是#if东西的忠实拥护者,特别是如果将其分散在代码库中,因为如果您不小心,它将在Debug生成通过的地方给您带来问题,但是Release生成会失败。因此,这就是我的想法(受C#中的#ifdef启发):public interface IDebuggingService{    bool RunningInDebugMode();}public class DebuggingService : IDebuggingService{    private bool debugging;    public bool RunningInDebugMode()    {        //#if DEBUG        //return true;        //#else        //return false;        //#endif        WellAreWe();        return debugging;    }    [Conditional("DEBUG")]    private void WellAreWe()    {        debugging = true;    }}
随时随地看视频慕课网APP
我要回答