Console.WriteLine发布模式编译

时间:2013-06-28 19:48:32

标签: c# reverse-engineering release-mode console.writeline

我正在用C#编写一个相当大的项目。它是一种游戏警卫系统,可防止玩家在多个级别作弊,包括本地隧道和多种算法的高级网络加密。

问题是关于Console.WriteLine方法。我在我的程序中经常使用它,因为很难跟踪多线程的进度,没有正确的输出。有什么办法,人们可以在运行时捕获这个输出吗?它包含一些敏感信息。应用程序在发布模式下构建,稍后进行模糊处理(构建后脚本)。

我应该使用Debug.WriteLine方法吗?保护应用程序不被反向工程是我的首要任务。我读过,在发布模式下,Debug的方法甚至没有编译成代码。另一方面,Console.WriteLine有一些很酷的重载。 有什么方法可以保持Console方法并保护它免受未经授权的访问?

3 个答案:

答案 0 :(得分:2)

如果在发布版本中根本不需要控制台输出,则Debug类中的所有成员都标有ConditionalAttribute,这意味着它不会包含在发布版本中。所以,是的,只要使用Debug.WriteLine,如果这就是你想要的。

答案 1 :(得分:1)

使用类似NLog的条件编译,以便它不包含在Release版本中。然后,您可以在调试时拖尾日志并获取相同的信息,而不会泄漏给用户。

或者,如果您更习惯使用Console.WriteLine,只需使用条件编译将调用包装起来,如下所示:

#if DEBUG
    Console.WriteLine("Debug version");
#endif

答案 2 :(得分:1)

与Debug类方法一样,您可以编写编译器忽略除DEBUG构建之外的调用的方法。他们只需要返回void,所以省略调用没有任何效果。见ConditionalAttribute。与条件编译相比,优势在于您不需要使用条件指令来丢弃代码。

如果你喜欢Console方法,你可以将它们包装在你自己的类中。