如果C#中的DEBUG在发布的二进制文件中变为true,#可以吗



我的代码中有这样的东西,用于检查用户的许可证:

// C# code:
#if DEBUG
MakeLicenseValidForever();
#else
CheckLicense();
#endif

现在,我需要知道这些指令是否保存在我发布的二进制文件中。如果它们确实被保存,则用户可以使#if DEBUG返回true并绕过检查。我需要知道#if DEBUG是否安全。

PS1:很明显,我使用release模式进行分发。

PS2:我先在这里问了我的问题,但由于没有得到任何关注,我又在这里问!

否,预处理器指令是在编译时处理的,即编译器不会将该部分编译为生成的二进制文件。它更像是代码注释,在编译过程中被丢弃,你甚至可以把无效的语句放在那里,编译器不会抱怨它

然而,通常情况下,您的代码会被编译为中间语言(IL(,这不是本机代码,并且很容易被反编译。如果你想要保护,最好使用一些AOT编译技术或模糊处理程序。

C#是一种编译成字节码的语言,例如在编译过程中处理语句。编译器使用的条件语句只有在定义了它们的情况下才是可访问和可编译的。换句话说,编译器看不到任何其他语句,您的代码是安全的

最新更新