java if debug_C#if / then指令用于debug和release

在解决方案属性中,我将Configuration设置为“release”,用​​于我唯一的项目。

在主程序的开头,我有这个代码,它显示“Mode = Debug”。 我也在最顶端有这两行:

#define DEBUG

#define RELEASE

我在测试正确的变量吗?

#if (DEBUG)

Console.WriteLine("Mode=Debug");

#elif (RELEASE)

Console.WriteLine("Mode=Release");

#endif

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

#1楼

命名空间

using System.Resources;

using System.Diagnostics;

方法

private static bool IsDebug()

{

object[] customAttributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(DebuggableAttribute), false);

if ((customAttributes != null) && (customAttributes.Length == 1))

{

DebuggableAttribute attribute = customAttributes[0] as DebuggableAttribute;

return (attribute.IsJITOptimizerDisabled && attribute.IsJITTrackingEnabled);

}

return false;

}

#2楼

我不是#if的忠实粉丝,特别是如果你把它全部传播到你的代码库中,因为它会给你调试构建通过的问题,但如果你不小心,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;

}

}

#3楼

由于这些COMPILER指令的目的是告诉编译器不要包含代码,调试代码,beta代码或者所有最终用户所需的代码,除了那些广告部门,即你想要的#Define AdDept能够根据您的需要包含或删除它们。 如果非AdDept合并到AdDept中,则无需更改源代码。 然后,所有需要做的就是在程序的现有版本的编译器选项属性页面中包含#AdDept指令并进行编译并执行! 合并后的程序代码会活跃起来!

您可能还希望对新进程使用声明,该进程尚未准备好进入黄金时段,或者在发布代码之前无法在代码中处于活动状态。

无论如何,这就是我这样做的方式。

#4楼

如果您尝试使用为构建类型定义的变量,则应删除这两行...

#define DEBUG

#define RELEASE

...这些将导致#if(DEBUG)始终为真。

RELEASE也没有默认的条件编译符号。 如果要定义一个转到项目属性,请单击“ 生成”选项卡,然后将“RELEASE”添加到“ 常规”标题下的“ 条件编译符号”文本框中。

另一种选择是这样做......

#if DEBUG

Console.WriteLine("Debug");

#else

Console.WriteLine("Release");

#endif

#5楼

默认情况下,如果项目在调试模式下编译,则Visual Studio定义DEBUG,如果项目处于发布模式,则不定义DEBUG。 默认情况下,RELEASE未在发布模式中定义。 使用这样的东西:

#if DEBUG

// debug stuff goes here

#else

// release stuff goes here

#endif

如果您只想在发布模式下执行某些操作:

#if !DEBUG

// release...

#endif

此外,值得指出的是,您可以对返回void方法使用[Conditional("DEBUG")]属性,只有在定义了某个符号时才执行它们。 如果未定义符号,编译器将删除对这些方法的所有调用:

[Conditional("DEBUG")]

void PrintLog() {

Console.WriteLine("Debug info");

}

void Test() {

PrintLog();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值