【问题标题】:How can I easily exclude certain lines of code from a compile?如何轻松地从编译中排除某些代码行?
【发布时间】:2011-03-11 04:55:57
【问题描述】:

我正在处理的整个软件项目中散布着许多为调试和实用目的而编写的代码。在我编译我的代码之前,我想要一种方法来选择这些代码块是否应该包含在我的编译中(不需要导航代码注释掉的东西)。我该怎么做?

我正在使用 c# 编程并使用 Microsoft Visual Studio 2010。

【问题讨论】:

    标签: c# visual-studio debugging shortcuts


    【解决方案1】:

    将属性[Conditional("DEBUG")] 添加到您只想在调试版本中执行的方法上。有关更多详细信息,请参阅here

    【讨论】:

    • 我对这个条件调试属性不熟悉,很狡猾。
    • 相同 - 没听说过这个。不错!
    • Slick 在 2010 年。但在 2019 年,链接不起作用。也没有搜索。现在我想知道“流行音乐”是什么。
    • @gbarry 修复了链接和措辞。
    【解决方案2】:

    我建议将您的块包含在#ifdef SOMETHING#endif 中,然后在您想在编译中包含该块时在您的项目设置中定义SOMETHING

    【讨论】:

      【解决方案3】:

      您需要预处理器指令或条件编译语句。你可以阅读他们的信息here

      来自该链接的示例:

      #define TEST
      using System;
      public class MyClass 
      { 
          public static void Main() 
          {
              #if (TEST)
                  Console.WriteLine("TEST is defined"); 
              #else
                  Console.WriteLine("TEST is not defined");
              #endif
          }
      }
      

      只有在代码顶部定义了 TEST 时才会编译代码。许多开发人员使用#define DEBUG,因此他们可以启用调试代码并通过更改顶部的那一行再次将其删除。

      【讨论】:

      • 如果您在 Visual Studio 中使用构建配置,则调试构建配置(默认)定义 DEBUG,而发布构建配置不定义。无需手动定义。
      【解决方案4】:

      考虑使用the Debug class 有条件地记录、断言等。这样做有很多优点。您可以选择在运行时记录(或不记录)。它们将您限制为(大部分)不改变行为的行为,解决了@STW 的一些(有效)问题。它们允许使用第三方日志记录工具。

      【讨论】:

        【解决方案5】:

        您可以使用preprocessor directives#if

        【讨论】:

          【解决方案6】:

          如果它们是为了调试,那么唯一可接受的解决方案是在这些代码周围加上:

          #ifdef DEBUG
          
          #endif
          

          这样可以确保在调试模式下编译时包含代码,但在发布模式下排除代码。

          【讨论】:

          • 当然还有其他可接受的解决方案。条件属性做同样的事情,并且(至少对我而言)比指令更可取,因为根据我的经验,指令往往会与第三方代码分析工具混淆。
          【解决方案7】:

          您可能需要考虑将这些调试功能完全从类中移出——让您的类在调试和发布模式之间“改变形状”可能会非常令人头疼,并且可能难以诊断问题。

          您可以考虑创建一个单独的“调试”程序集,其中包含所有调试助手——然后确保您可以将其从解决方案中排除并在没有它的情况下成功构建。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-11-03
            • 1970-01-01
            • 2017-10-02
            • 2011-04-30
            • 1970-01-01
            • 2014-09-03
            • 1970-01-01
            相关资源
            最近更新 更多