Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否应该在VisualStudio';在发布配置中运行时的输出窗口?_C#_Visual Studio - Fatal编程技术网

C# 我是否应该在VisualStudio';在发布配置中运行时的输出窗口?

C# 我是否应该在VisualStudio';在发布配置中运行时的输出窗口?,c#,visual-studio,C#,Visual Studio,我想知道在发布模式下运行时,我是否打算在调试输出中看到任何东西 下图是我在版本配置中运行时输出窗口的屏幕截图。 看到调试内容让我觉得我实际上并没有运行一个发布编译,有没有一种方法可以确保我确实在运行一个发布模式?简短回答 这些看起来是,而不是,所以它们甚至出现在发布版本中 长话短说 让我们通过研究术语“调试”的各种上下文含义来了解发生了什么 “调试”构建配置 首先,这里是VisualStudio中带有“调试”和“发布”选项的下拉列表的上下文。这些选项是构建配置。要了解此选项的意义,请双击项目的

我想知道在发布模式下运行时,我是否打算在调试输出中看到任何东西

下图是我在版本配置中运行时输出窗口的屏幕截图。

看到调试内容让我觉得我实际上并没有运行一个发布编译,有没有一种方法可以确保我确实在运行一个发布模式?

简短回答 这些看起来是,而不是,所以它们甚至出现在发布版本中

长话短说 让我们通过研究术语“调试”的各种上下文含义来了解发生了什么

“调试”构建配置 首先,这里是VisualStudio中带有“调试”和“发布”选项的下拉列表的上下文。这些选项是构建配置。要了解此选项的意义,请双击项目的“属性”节点,并更改为“生成”页面

此页面(以及其他一些页面)可以具有特定于特定生成配置的设置。您可以通过页面上的下拉列表查看每个配置的设置(默认为您当前使用的构建配置)

“Debug”和“Release”这两个名称没有什么特别之处——它们只是默认配置,具有这些场景的默认设置。您可以更改配置的设置。您还可以定义自己的构建配置,但这样做超出了本答案的范围。最后,这些设置也由simliar目标平台(例如,“AnyCPU”、“x86”等)参数化,但对于这个答案,我假设所有构建都使用相同的平台设置

“调试”条件编译符号 C#具有条件编译功能——根据编译时定义或未定义的符号编译不同代码段的能力。例如,如果定义了
MY\u SYMBOL\u NAME
,则此常量的值为“A”,否则为“B”

        public const string MyConst =
#if MY_SYMBOL_NAME
      "A";
#else
      "B";
#endif
项目“构建”页面上的前三个设置控制这些符号。特别是“Define DEBUG constant”和“Define TRACE constant”——它们实际上是指编译符号。通过检查这些,所选生成设置将分别使用定义的
DEBUG
TRACE
符号进行编译

默认情况下,“Debug”和“Release”配置都定义了
跟踪
,但只有“Debug”定义了
调试

调试
类 条件编译特别扩展到
System.Diagnostics.Debug
System.Diagnostics.Trace
类的成员:只有定义了适当的符号,才会编译对这些类的方法的调用。因此:

Debug.WriteLine("!");
是这样对待的:

#if DEBUG
    Debug.WriteLine("!");
#endif
这些方法写入所谓的“跟踪侦听器”,即

因此,如果您看到的文本是通过调用
Trace
编写的,那么即使在版本配置中,您仍然可以看到它。当然,这意味着除非您显式禁用“Define TRACE constant”设置,否则此日志记录将保留在附带的版本中

启动调试与不启动调试 那么,为什么VisualStudio要展示这些东西呢?因为“调试”还有另外一个含义:是否在启动应用程序时附加了VisualStudio的调试器。VS的调试菜单栏中列出了两个启动选项:“启动调试”和“启动而不调试”。这与您正在使用的构建配置是正交的:您可以在不连接调试程序的情况下运行调试构建,也可以在连接调试程序的情况下运行发布构建(尽管这可能没有多大帮助,因为在某些情况下可能不会命中断点)


使用调试器时,“输出”窗口将显示写入默认跟踪侦听器的消息。这被标记为“Debug”,但它包含在那里编写的任何内容—包括对
跟踪的调用,这些调用(默认情况下)包含在发布版本中。

您是否正在运行附带的调试器?很抱歉我的无知。我不这么认为。至少这不是我手动(或故意)做的事情。当我跑步时,我只需按F5。在我的开始按钮旁边的小下拉框中有一个调试和发布选项。无论我选择哪个选项,都会显示调试信息。如果您仅使用F5运行,则您正在调试。您不应该使用F5和发布版本。改用CTRL+F5,因为它不会运行调试器(你不能设置断点)啊,原来我比我意识到的还要糊涂。这就是我出错的开始:)我必须补充一点,乔下面的回答非常好,也非常有用!非常好的回答。这有助于我准确地了解我需要知道的东西。