2013-06-28 42 views
0

我正在用C#编写一个很大的项目。它是一种游戏保护系统,可以防止玩家在多个级别上作弊,包括本地隧道和使用多种算法的高级网络加密。Console.WriteLine发布模式编译

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

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

+0

你怎么样不使用Console.WriteLine和登录到安全的位置? – tnw

+0

@tnw他不需要保护它;他只需要将所有控制台写入完全从发布版本中删除,并且只存在于调试版本中。 – Servy

+0

'Debug.WriteLine'应该有足够的重载来覆盖'Console.WriteLine'可以做的所有事情。与“Console”不同的是,它会禁止一些系统值类型,例如'bool'和'int',所以它的效率较低,但它仅适用于调试版本,开始时应该没有问题。只要使用它。 – Servy

回答

1

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

或者,如果你更舒适的使用Console.WriteLine,只是包装用条件编译调用,像这样:

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

或甚至更好,他可以创建一个替代类的控制台,写到任何他想要的地方;调试,控制台或某些日志记录API。但最好的是,他不需要在他的代码中使用#if DEBUG。他只需要在他的替换类中,他可以简单地在发布版本中删除WriteLine()实现。 – Pete

+0

@Pete我认为,这是最好的选择。谢谢你,先生。 –

2

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

1

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

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

相关问题