在C#中,是否在发布模式下运行Debug.Assert测试?
以以下为例:在C#中,是否在发布模式下运行Debug.Assert测试?,c#,.net,visual-studio,debugging,assert,C#,.net,Visual Studio,Debugging,Assert,以以下为例: public void Foo() { //Code... Debug.Assert(ExpensiveTest()); //Code... } 在发布模式下编译时,Debug.Assert方法会发生什么变化?ExpensiveTest()还会运行吗?如果不是,那么它是如何工作的(因为它不是一个可以设置为“无”计算的宏)?如果它确实运行了,那么这不是违背了调试断言的目的吗?根据debug方法只在调试版本中编译 因此,如果您构建了正确的发布版本(有关详细
public void Foo()
{
//Code...
Debug.Assert(ExpensiveTest());
//Code...
}
在发布模式下编译时,Debug.Assert
方法会发生什么变化?ExpensiveTest()
还会运行吗?如果不是,那么它是如何工作的(因为它不是一个可以设置为“无”计算的宏)?如果它确实运行了,那么这不是违背了调试断言的目的吗?根据debug
方法只在调试版本中编译
因此,如果您构建了正确的发布版本(有关详细信息,请参阅菜单项Debug/configurationmanager
),此方法调用将被删除
在发布模式下编译时,Debug.Assert方法会发生什么变化
如果您的发行版配置中没有定义DEBUG
条件编译符号,它将被完全删除(包括调用ExpensiveTest
)
如果查看,则声明使用[ConditionalAttribute(“DEBUG”)]
:
用于条件编译。有关更多详细信息,请参见C#4规范第17.4.2节。
在Visual Basic和Visual C#中,可以使用
调试或跟踪,位于System.Diagnostics命名空间中。
调试类方法不包括在程序的发布版本中,因此它们不会增加程序的大小或降低程序的速度
你的发布代码
同样来自同一链接:
请注意,创建时,Debug.Assert方法的调用将消失
代码的发布版本。这意味着检查的电话
平衡在发布版本中消失。要解决这个问题,,
您应该将Debug.Assert替换为Trace.Assert,而Trace.Assert不会
在发布版本中消失
在C#中,是在发布模式下运行Debug.Assert测试吗
Microsoft支持部门的回答是“否”:
您可以单独使用跟踪和调试类,也可以
在同一应用程序中一起使用。在调试解决方案配置中
项目中,跟踪和调试输出都处于活动状态。项目
从这两个类向所有侦听器生成输出
物体。但是,只有发布解决方案配置项目
从跟踪类生成输出。释放解决方案
配置项目忽略任何调试类方法调用
特别是,最后一句话明确指出,Debug.Assert()
语句(以及其他调试类方法调用)在发布版本中被忽略。它带有标记,因此只有在调用程序集使用设置的Debug
符号编译时,调用才会被包含。
[ConditionalAttribute("DEBUG")]
public static void Assert(
bool condition
)