我正在研究的软件项目中散布着许多代码行,这些代码是为调试和实用目的而编写的。在编译代码之前,我想要一种方法来选择是否应该将这些代码块包含在我的编译中(不需要导航代码注释掉)。我怎么能这样做?
我正在用c#编程并使用Microsoft Visual Studio 2010。
答案 0 :(得分:13)
将[Conditional("DEBUG")]
弹出到您只想在调试版本中执行的方法。有关详细信息,请参阅here。
答案 1 :(得分:7)
我建议您将块放在#ifdef SOMETHING
和#endif
中,然后在要在编译中包含该块时在项目设置中定义SOMETHING
。
答案 2 :(得分:7)
您需要预处理程序指令或条件编译语句。您可以阅读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
}
}
只有在代码顶部定义TEST时才编译代码。许多开发人员使用#define DEBUG,因此他们可以启用调试代码并通过更改顶部的一行来再次删除它。
答案 3 :(得分:3)
考虑使用the Debug class来有条件地记录,断言等。这有很多优点。您可以选择在运行时记录(或不记录)。它们限制了(主要)非行为改变行为,解决了某些@ STW(有效)问题。它们允许使用第三方日志工具。
答案 4 :(得分:1)
您可以使用preprocessor directives w / #if
答案 5 :(得分:1)
如果它们用于调试,那么唯一可接受的解决方案是用以下代码包围这些代码:
#ifdef DEBUG
#endif
这可确保在调试模式下编译时包含代码,但在发布模式下将其排除。
答案 6 :(得分:1)
您可能需要考虑将这些调试功能完全移出类 - 让您的类在调试和发布模式之间“改变形状”可能是一个真正的问题,并且很难诊断出问题。
您可以考虑创建一个单独的“Debug”程序集,其中包含所有调试助手 - 然后确保您可以将其从解决方案中排除,并在没有它的情况下成功构建。