为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
当年话下 2019-12-07 15:44:00
在“解决方案”属性中,对于我的唯一一个项目,我将“配置”设置为“发布”。在主例程的开头,我有这段代码,它显示“ Mode = Debug”。我在最上方也有这两行:#define DEBUG #define RELEASE我在测试正确的变量吗?#if (DEBUG)            Console.WriteLine("Mode=Debug"); #elif (RELEASE)            Console.WriteLine("Mode=Release"); #endif我的目标是根据调试与发布模式为变量设置不同的默认值。
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

删除#define DEBUG代码中的。在该特定构建的构建配置中设置预处理器(DEBUG / _DEBUG应该已经在VS中定义了)。


打印“ Mode = Debug”的原因是由于您的原因#define,然后跳过elif。


另外,正确的检查方法是:


#if DEBUG

    Console.WriteLine("Mode=Debug"); 

#else

    Console.WriteLine("Mode=Release"); 

#endif

不要检查发布


查看完整回答
反对 回复 2019-12-07
?
UYOU

TA贡献1878条经验 获得超4个赞

默认情况下,如果项目是在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();


查看完整回答
反对 回复 2019-12-07
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

我不是#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;

    }

}


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 459 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信