如果指令不存在于 c# 中,我的预处理器指令中的代码是否包含在编译代码中?

Does my code inside preprocessor directives included in compiled code if the directive is not present in c#?

我有一个应用程序,我想为它创建一个演示。我更愿意为我的付费版本提供另一个 exe,为演示提供不同的 exe,以防止拥有演示版本的人破解我的付费版本。现在我已经在演示中注释了我需要的代码,所以每当我必须创建一个演示时,我都会检查这些注释并进行必要的更改。今天我意识到#if 指令..

现在我的问题是我是否有这样的代码

#if DEMO
   public string test()
   {
     return "blabla";
   }
#endif

而且我没有定义 DEMO 指令,所以我的代码显然变灰了,我无法达到我目前所期望的这个方法。现在我在没有定义 DEMO 指令的情况下重建了我的项目,然后我从输出文件夹中删除了我的 .pdb 文件,之后我尝试用 dotpeek 检查我的可执行文件,但在那里我看不到这个测试方法。

我可以使用这种方法来分离我的演示版和付费版可执行文件吗?可以说这个 test 方法是一个演示方法,所以如果有人破解它,它不会出现在付费版本中。反之亦然,如果此 test 方法是付费版本方法并且我将其放在 #if !DEMO 中,那么如果我定义 DEMO 并重建我的 exe,我将看不到此 test 方法对吗?

正如我之前提到的,我已经检查了代码并且无法使用 dotpeek 查看我的方法,但我只想 100% 确定这些方法不会在 dotpeek 或其他任何程序中看到

是的,如果未定义符号,则完全省略代码。它可以是绝对的垃圾代码——编译器完全忽略它;它只是寻找结尾(#endif#else)。

关于 demo/paid 版本是否满足您的需求的问题有些不同,但从“输出中包含的内容”的技术角度来看,答案很简单。