#如果忽略调试(VB.net或C#)

#如果忽略调试(VB.net或C#),c#,vb.net,C#,Vb.net,到目前为止,我的代码中有几项工作正常: #If DEBUG Then ... some code here #End If 现在,我注意到,最近,“#If DEBUG Then…#End If”中的代码 在“释放模式”下也获取执行 这很奇怪,以前从未发生过。发生了什么事,所以 #If DEBUG现在被忽略(它们在IDE的DEBUG或最终可执行文件中都被忽略) 我申请了清洁、重建等:没有运气。谢谢你的提示和帮助 -帕姆 在项目属性/编译/高级编译选项下 一个

到目前为止,我的代码中有几项工作正常:

#If DEBUG Then    
   ... some code here       
#End If     
现在,我注意到,最近,“#If DEBUG Then…#End If”中的代码 在“释放模式”下也获取执行

这很奇怪,以前从未发生过。发生了什么事,所以 #If DEBUG现在被忽略(它们在IDE的DEBUG或最终可执行文件中都被忽略)

我申请了清洁、重建等:没有运气。谢谢你的提示和帮助

-帕姆

在项目属性/编译/高级编译选项下 一个名为“Define Debug Constant”的复选框设置了此选项

退房:

编辑:使用以下命令尝试此操作:

#If CONFIG = "Debug" Then
#CONST DEBUG = true

#if CONFIG = "Release" Then
#CONST DEBUG = false

取消定义
调试,这将不会执行该部分。

首先,确保您了解如何运行代码和如何构建代码之间的区别。太多人将“在调试器中启动”等同于“调试版本”,将“不在调试器中启动”等同于“发布版本”。它们是完全正交的-您可以在调试器中启动发布版本(通常可用信息较少),也可以不在调试器中启动调试版本。如果您已经意识到这一点,请道歉

现在,假设您确实已将正在构建的项目配置更改为发行版,则需要检查该特定配置的项目属性。我不知道它在VB中是什么样子,但在C中,在“项目属性”的“构建”选项卡中,会有一个已定义符号的列表-这会影响是否构建调试代码。也许有人将项目配置从调试复制到了发布版

编辑:在生成时检查此项的一种方法是:

在发布版本中,应该无错误地生成。在调试中,它不会


编辑:另一个选项是,您的总体解决方案配置现在引用了错误的项目配置类型。我记不起确切的菜单名,但如果您在Project中查找Configuration Manager,您应该能够将“Project”和“Solution Configuration”网格映射到要构建的项目配置。

您是否有可能在发布配置中勾选“Define DEBUG constant”,当您在项目属性/构建中时

还要确保您没有在解决方案级发布配置中构建项目级调试配置(请参阅配置管理器)。

还请记住
#如果Debug
必须为大写。e、 g.
#如果调试
不起作用。

C#项目(Visual Studio)

  • 转到:项目属性->生成(选项卡)
  • 选择配置:发布
  • 取消选中“定义调试常量”

  • 现在选择配置:Debug

  • 选中“定义调试常量”

  • 在代码中,现在可以键入以下内容(使用大写字母调试)


  • 如果您使用的是ASP.NET,请确保Web.Config文件中的这一行:

    <compilation debug="false" targetFramework="4.5">
    
    
    

    因此,如果debug=“true”您的项目在调试模式下运行。

    也有类似的问题,其中“debug”从来都不是真的。通过取消选中“Define DEBUG constant”复选框并每次重新生成来尝试,但不起作用

    我的解决方案是在调试配置的“条件编译符号”文本框中手动定义“调试”。重建时,Visual Studio 2019自动从文本框中删除调试符号(因为它确实不应该在那里),从那时起它再次工作。当我从调试切换到发布时,正确的行变灰了。
    这似乎是VS2019(16.4.5)中可能存在的错误?

    在堆栈溢出帖子中链接到专家交换?!照常检查。我没有碰它。@Pam:“像往常一样检查过了”?不应该在Release build.Hmm中检查它。当我链接它时,我可以滚动到底部,它会显示所有其他答案。@BoltClock这是我搜索中出现的第一个答案:PWait there!在发布模式下,是否必须取消选中调试?那trace呢?必须检查还是不检查?什么?我没有得到那份工作hint@Pam:您说过代码即使在发布模式下也在执行。这是因为调试是在代码的某个地方定义的。看这里:不,我没有。在高级编译选项中,选中“定义调试”。即使在最后的EXE中#如果调试被忽略!我没有触及默认配置。是的,我正在发布模式下构建它。即使在最终的可执行文件中,#if调试现在也被忽略了(这在昨天之前没有发生过)。@Pam:查看我对另一个诊断测试和另一个区域的编辑以进行检查。如果我使用上面的代码,它会说(IDE中的发布模式):错误10“if”、“ElseIf”、“Else”、“End if”、“Const”或“Region”。在VB中使用
    #if(表达式)然后
    #如果结束
    但不幸的是没有#错误@user1306322答案和你的评论都只在C#的情况下有效。@AhmedAbdelhameed我最近对VB没有任何经验,但是你知道在VB中“#如果”,“如果”,“调试大写”和“调试”是否重要吗?据我所知,在c语言中,“if”必须是小写,而“DEBUG”必须是大写,这样它才能工作。它们并不重要。VB不像C一样区分大小写。即使是
    #如果调试,那么
    也可以正常工作。但是,在VB中编写它的正确方法是
    #如果调试,那么
    ,如果启用了自动格式化(漂亮列表),VS将为您执行此操作。简而言之,在C语言中是
    if
    /
    #if
    ,在VB中是
    if
    /
    #if
    ,但是,与C语言不同的是,VB编译器将同时接受这两种格式。如果你像我一样使用新的项目格式(netcore/standard)来写这篇文章,这与条件编译器无关
    #IF DEBUG
    
    // Debugging code goes here
    
    #ENDIF
    
    <compilation debug="false" targetFramework="4.5">