【问题标题】:How does C# compile the code with #if preprocessor directive?C# 如何使用#if 预处理器指令编译代码?
【发布时间】:2011-04-26 12:54:03
【问题描述】:

如果我在代码中使用#if 指令,我想知道如何编译我的代码。 我想创建我的应用程序的特殊版本(商业演示版),并且我想限制我的应用程序的功能。我宁愿避免混淆,只是不想将我所有的编译代码添加到可执行文件中。我需要解决方案来阻止在反汇编过程中预览我的代码。我可以使用 #if 指令进行变体编译,而不是使用 cmets 来禁用代码部分吗?

【问题讨论】:

    标签: c# compilation c-preprocessor


    【解决方案1】:

    使用#if 指令就像在c++ 中使用预处理器一样,如果条件尚未满足(在编译时),代码将根本不存在。来自MSDN

    当 C# 编译器遇到 #if 指令,最终由一个 #endif 指令,它只会编译指令之间的代码 定义了指定的符号。 与 C 和 C++ 不同,您不能分配 数值到符号; #if C# 中的语句是布尔值,并且只有 测试符号是否已经 定义与否。

    【讨论】:

    • 我假设您的意思是“预处理器”而不是“预编译”。 C++ 预处理器中的#if 仅表示如果条件不满足,则在将文本块传递给真正的编译器之前对其进行文本编辑,即如果条件不满足,编译器甚至看不到#if 中的代码。
    【解决方案2】:

    作为@ohadsc 答案的补充:您可以随时检查Reflector 编译器实际生成的内容。

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      相关资源
      最近更新 更多