分散在我正在开发的一个软件项目中,有许多代码是为了调试和实用目的而编写的。在我编译我的代码之前,我想要一种方法来选择这些代码块是否应该包含到我的编译中(这不需要导航代码注释)。我怎样才能做到这一点?如何从编译中轻松排除某些代码行?
我在C#编程和使用Microsoft Visual Studio 2010
分散在我正在开发的一个软件项目中,有许多代码是为了调试和实用目的而编写的。在我编译我的代码之前,我想要一种方法来选择这些代码块是否应该包含到我的编译中(这不需要导航代码注释)。我怎样才能做到这一点?如何从编译中轻松排除某些代码行?
我在C#编程和使用Microsoft Visual Studio 2010
流行[Conditional("DEBUG")]
到您只想在调试版本中执行的方法上。有关更多详细信息,请参阅here。
,当你想在你的编译块我会建议封闭在#ifdef SOMETHING
和#endif
你的块,然后定义在您的项目设置SOMETHING
。
您需要预处理器指令或条件编译语句。你可以阅读关于他们here。
从该链接的一个例子:
#define TEST
using System;
public class MyClass
{
public static void Main()
{
#if (TEST)
Console.WriteLine("TEST is defined");
#else
Console.WriteLine("TEST is not defined");
#endif
}
}
的代码,如果测试是在代码的顶部限定仅编译。许多开发人员使用#define DEBUG,因此他们可以启用调试代码,并通过更改顶部的一行来重新删除它。
如果您在Visual Studio中使用构建配置,则Debug构建配置(默认情况下)会定义DEBUG,而Release构建配置则不会。无需手动定义它们。 – Toby 2010-07-02 17:03:30
您可以使用preprocessor directives W/#if
如果他们是进行调试,那么唯一可以接受的解决方案是围绕这样的代码:
#ifdef DEBUG
#endif
这可确保当您编译代码包含在调试模式下,但在发布模式下排除。
当然还有其他可以接受的解决方案。条件属性做同样的事情,并且(对我来说)至少比指令更好,因为根据我的经验,指令往往会混淆第三方代码分析工具。 – womp 2010-07-02 17:11:05
您可能需要考虑将这些调试功能完全移出类 - 让您的类在“调试”和“发布”模式之间“更改形状”可能非常令人头痛,并且可能难以诊断问题。
您可以考虑创建一个包含所有调试帮助程序的独立“调试”程序集 - 然后确保您可以从解决方案中排除它,并在没有它的情况下成功构建。
考虑使用the Debug class来有条件地记录,断言等。这有很多优点。您可以选择在运行时记录(或不记录)。他们限制你(主要)不改变行为的行为,解决@ STW(有效)关注的一些问题。他们允许使用第三方日志工具。
+1。 IMVHO,这是最干净的方式。 – womp 2010-07-02 17:16:57
我并不熟悉这个条件调试属性,非常漂亮。 – CrimsonX 2010-07-02 17:35:04
相同 - 没有听说过这个。太好了! – RQDQ 2010-07-02 20:23:06