预处理程序指令无法定义或取消定义预处理程序

时间:2016-04-21 13:37:08

标签: c#

我正在尝试学习预处理器指令,所以我做了一个简单的例子:

using System;

namespace learning
{
    class Program
    {
        static void Main(string[] args)
        {
#define DEBUG
            test();
        }

        private void test()
        {
#if DEBUG
            Console.WriteLine("Debug mode");
#elif RELEASE
            Console.WriteLine("Release mode");
#else
            Console.WriteLine("Debug and release don't defined");
#endif
        }

    }
}

但不幸的是我错了:

  

无法在文件中的第一个标记之后定义或取消定义预处理程序符号

我从编程书中拿这个例子,出了什么问题?

更新(我的解决方案):

#define RELEASE
using System;

namespace learning
{
    class Program
    {
        static void Main(string[] args)
        {
#if DEBUG
            Console.WriteLine("Debug mode");
#elif RELEASE
            Console.WriteLine("Release mode");
#else
            Console.WriteLine("Debug and release don't defined");
#endif
            Console.ReadLine();
        }

    }
}

打印结果:Debug mode,但应为Release mode。我做错了什么?

2 个答案:

答案 0 :(得分:4)

正如Neo所提到的,你可以在文件的顶部定义它。

或者,如果您希望它是全局的,并且您使用的是Visual Studio,则可以在项目属性中定义它(右键单击项目,选择“属性”,然后转到“构建”选项卡)。

该屏幕允许您根据构建配置定义符号(因此您可以为调试版本设置符号,并在切换配置时自动删除它。)

如果您不使用Visual Studio,则可以将条件符号传递给MSBuild或csc(命令行构建或命令行c#编译器)。所有这些选项都可以让您在不更改源代码的情况下设置/取消设置符号。

答案 1 :(得分:2)

您需要在#define语句之前将using行放在文件的最开头