Debug.Assert是否在发布模式下生成IL?

时间:2012-04-03 15:05:37

标签: c# .net il

当源代码中存在Debug.Assert()方法调用并且我在发布模式下编译时,编译器是否为Debug.Assert()生成IL,即使它没有被调用?

我们的一位开发人员最近添加了一个Assert,显示有关内部安全性的信息。有人可以查看发布模式IL并找出断言的文本吗?

2 个答案:

答案 0 :(得分:9)

默认情况下,除非您定义DEBUG符号(默认情况下,对于已关闭的Release)。

要验证,请打开“项目属性”,然后在Visual Studio中选择“构建”窗格。它将显示复选框"定义DEBUG常量"。如果为Release打开它,则会触发断言;否则,他们不会。

答案 1 :(得分:7)

不,Debug类(具有ConditionalAttribute属性)的成员不会发出IL。有no explicit mention on MSDN,但以下两个引号暗示行为相当好,所以增加罗伊的答案:

  

如果使用Debug类中的方法来打印调试信息   并通过断言检查您的逻辑,您可以使您的代码更多   强大而不影响您的性能和代码大小   运输产品。

因此,没有尺寸差异意味着没有任何输出,

  

ConditionalAttribute属性应用于Debug的方法。   支持ConditionalAttribute的编译器忽略对这些的调用   除非“DEBUG”被定义为条件编译符号。   请参阅编译器的文档以确定是否   支持ConditionalAttribute和定义的语法   条件编译符号。

这意味着,在编译器级别,甚至不会考虑这些调用(未定义DEBUG时。)