如何在VB.NET中使用#IF DEBUG

时间:2010-08-31 21:09:17

标签: .net vb.net

是否可以从#IF DEBUG条件内部为类变量赋值?

如果我在DEBUG模式下运行,我想从主表单加载中有条件地执行一些代码。我以为我可以这样做:

Public Class Form1
    public DEB as Integer

    #if DEBUG then
        DEB = 1
    #else
        DEB = 0
    #end if

    Private Sub Form1_Load(....)
        if DEB=1 Then
            <do something>
        else
            <do something else>
        end if
    ....

但是,似乎无法为变量赋值。我显然不能正确理解范围。我似乎无法将#if DEBUG置于Load子例程中。我该怎么做?

2 个答案:

答案 0 :(得分:34)

为什么不直接测试编译常量?通过测试实际变量,你没有获得任何东西。

Public Class Form1

Private Sub Form1_Load(....)

#if DEBUG then
    <do something>
#else 
    <do something else>
#end if

End Sub

End Class

答案 1 :(得分:0)

我在这里看不到您的问题。我这样做,并且效果很好。令人讨厌的是编译常数不能直接用于正在运行的代码,但是在您考虑它时才有意义。

响应克里斯蒂安,我认为反对将代码封装在编译器指令中的情况是,使用代码变量,您可以编写更干净,更具描述性的代码,而重复的次数可能更少,从而维护也更简单。

例如,这是我的标准库代码:

Public Module Common

    #if DEBUG then
        Public In_Debug As Boolean = True
    #else
        Public In_Debug As Boolean = False
    #end if
End Module

Public Class Form1

    Private Sub Form1_Load(....)

        If In_Debug Then SplashScreen.Hide()
        ...

In-Debug代码变量有效地放置在公共模块中使其成为 Global ,您可以将其视为整个项目中的常量。

(示例说明:我没有在调试中显示初始屏幕,因为它可能会隐藏对话框等,可能会阻止您继续前进。)

很显然,您可以使用TRACE常量或选择声明的任何自定义编译器常量来做相同的事情。

是的,正如GregH所述,您需要确保在项目的 Debug 配置中确实声明了一个DEBUG常量(无论它是否实际称为“ Debug”)。您无需在 Release 中声明它;它的缺席被解释为“假”。