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

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

#define DEBUG 
#define RELEASE

我测试的变量对吗?

#if (DEBUG)
            Console.WriteLine("Mode=Debug"); 
#elif (RELEASE)
            Console.WriteLine("Mode=Release"); 
#endif

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


当前回答

确保在“项目生成属性”中定义了DEBUG常量。这将启用#if DEBUG。我没有看到预定义的RELEASE常量,所以这可能意味着任何不在DEBUG块中的东西都是RELEASE模式。

其他回答

确保在“项目生成属性”中定义了DEBUG常量。这将启用#if DEBUG。我没有看到预定义的RELEASE常量,所以这可能意味着任何不在DEBUG块中的东西都是RELEASE模式。

bool isDebug = false;
Debug.Assert(isDebug = true); // '=', not '=='

方法Debug。Assert具有条件属性DEBUG。如果没有定义,则取消调用和isDebug = true赋值:

如果定义了符号,则包含调用;否则,调用(包括调用参数的计算)将被省略。

如果定义了DEBUG,则isDebug将被设置为true(并传递给DEBUG)。Assert,在这种情况下它什么也不做)。

我得想个更好的办法。我明白了,#if块是其他配置中的有效注释(假设DEBUG或RELEASE;但任何符号都适用)

public class Mytest
    {
        public DateTime DateAndTimeOfTransaction;
    }

    public void ProcessCommand(Mytest Command)
        {
            CheckMyCommandPreconditions(Command);
            // do more stuff with Command...
        }

        [Conditional("DEBUG")]
        private static void CheckMyCommandPreconditions(Mytest Command)
        {
            if (Command.DateAndTimeOfTransaction > DateTime.Now)
                throw new InvalidOperationException("DateTime expected to be in the past");
        }

删除定义并检查条件是否处于调试模式。你不需要检查指令是否处于释放模式。

就像这样:

#if DEBUG
     Console.WriteLine("Mode=Debug"); 
#else
    Console.WriteLine("Mode=Release"); 
#endif

我更喜欢这样检查它,而不是寻找#define指令:

if (System.Diagnostics.Debugger.IsAttached)
{
   //...
}
else
{
   //...
}

需要注意的是,您当然可以在调试模式下编译和部署一些东西,但仍然没有附加调试器。