在解决方案属性中,我将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版本会失败。
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();
}
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3164905