为什么Debug.Assert行会在发布模式下导致编译错误?

时间:2011-09-20 13:42:28

标签: .net vb.net

我很惊讶在发布模式下使用以下代码获得编译错误。

我只有一个DEBUG函数声明

#If DEBUG Then
Private Function DEBUG_Check() As Boolean
    'Do some checks
    If (checks OK) Return True Else Return False
End Function
#End If

然后在代码中我在Debug.Assert()中使用它,如下所示:

Debug.Assert(DEBUG_Check())

我收到编译错误“未声明DEBUG_Check” 我认为调试Debug.Assert完全从Release compile中删除了吗?

1 个答案:

答案 0 :(得分:2)

因为您已将代码包装在编译器标记中:

#If DEBUG Then
#End If

这些标记告诉编译器完全跳过标记中的代码,如果没有定义DEBUG,它不处于发布模式,所以在发布模式下没有像DEBUG_Check()这样的代码。

与后来的评论相关:

http://msdn.microsoft.com/en-us/library/ttcc4x86.aspx

这篇文章是自相矛盾的。有一次它说:

  

Debug类方法不包含在程序的Release版本中,因此它们不会增加大小或降低发布代码的速度。

然而,后来它说:

  

在调试器下运行此代码时,断言语句为   已评估,但在发布版本中,未进行比较,因此   没有额外的开销。

我的解释是仍然调用Debug.Assert(params),但是在调试模式下调用了一个空shell方法,而不是调试模式中的函数方法。因此,传递的参数必须仍然有效。