【问题标题】:Release Mode vs Debug = "false"发布模式与调试 =“假”
【发布时间】:2011-03-18 17:45:56
【问题描述】:

我试图明确解释在发布模式下编译对 .Net 3.5 Web 应用程序与 debug="false" 的影响。到目前为止,设置 debug="false" 似乎具有相同的效果,并且在发布模式下编译已被贬值,但我找不到任何确凿的证据。

这个问题看起来很有希望,但似乎是在回答调试和发布版本之间的区别,而不是发布模式和 debug="true": What's the difference between compilation debug="false" and Release mode?

但是它确实链接到这篇文章: http://odetocode.com/blogs/scott/archive/2005/11/15/debug-and-release-builds-in-asp-net-2-0.aspx

“这种新的编译模型使网站的配置管理器过时了。出现在 Visual Studio 2005 网站“项目”中的唯一选项是调试配置。别担心——它没有任何意义。web.config文件现在统治着学校。”

现在这是我最接近的答案,它似乎暗示发布模式已被贬低,有利于 debug="false" 但我在 MSDN 或任何其他网站上找不到任何确认来源。

任何帮助将不胜感激。

更新

对不起;澄清这是我指的“Web 应用程序项目”。

稍微改一下我的问题,如果我在 web.config 中有以下设置:

<compilation defaultLanguage="c#" debug="false">

发布和调试模式编译有什么影响(如果有的话)?

【问题讨论】:

    标签: asp.net build debugging release


    【解决方案1】:

    你必须小心你的用词选择。有“Web 应用程序”和“网站”项目。

    “网站”项目没有“发布”配置。网站仅使用 web.config 编译部分中的调试设置。如果您打开“网站”,请注意“配置管理器”中列出的唯一配置是“调试”。您可以从项目的“MSBuild 选项”属性页或“发布网站”对话框控制编译。

    “发布”和“调试”配置对“Web 应用程序”项目按预期工作。

    【讨论】:

      【解决方案2】:

      “发布”模式和“调试”模式背后的想法是,在调试模式下,编译包含调试符号,这对调试很有用,但对生产没有用,因为它会减慢进程。

      但是,“发布”模式会删除这些调试符号,因此进程运行良好,没有任何问题。

      现在,微软已经在 web 应用程序项目中实现了上述模型,而网站项目则略有不同。希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        TL;DR = 更重要的是编译 debug="true|false"。但是,在 Debug 中编译对性能的影响也很小。

        Debug 和 Release 之间的区别(除了是否定义 DEBUG 常量)是“优化代码”标志,它在 Debug 中禁用,在 Release 中启用。 (如果您查看项目设置,“构建”选项卡。)

        “优化代码”标志告诉语言编译器在生成 DLL 时进行一些优化(如删除未使用的变量,并省略一些调试符号)。与未设置标志时相比,这是一个相对较小的性能改进(可能对 C++ 与 C#/VB 的影响更大)和 DLL 内存使用量略有减少。

        编译 debug="true" 标志告诉 JIT 编译器该代码应该被连接起来进行调试。这会降低多个维度(加载时间、运行时间、内存和资源加载)的性能,但可以调试正在运行的代码。

        如果您想在生产环境中获得更详细的堆栈跟踪信息,那么您可能可以使用编译 debug="false" 运行调试构建,而性能差异很小。但我会测试两者的性能,以确保您不会损失太多。

        信用属于this answer,链接到this blog entry,后来我找到了this one,其中包含所有这些信息。

        【讨论】:

          【解决方案4】:

          这就是区别。如果你的 web.config 文件中有这个:

          <system.web>
              <compilation debug="true" .../>
          

          如果您从 Visual Studio 的下拉列表中选择 Release(请注意它们是冲突的),所有内容都会在调试模式或发布模式下编译吗?

          Visual Studio 对编译 Web 应用程序一无所知。构建一个 Web 应用程序并检查 bin 文件夹,您会发现它是空的。那是因为 ASP.NET 编译它。 ASP.NET 将使用配置文件中的compilation debug 标志来确定如何编译.cs 文件、构建表单和用户控件等。它还将使用此标志来决定是否应该执行捆绑和缩小。

          This article 总结得很好:

          总之,您可以使用 web.config 中编译部分的调试属性来控制调试和发布版本——除非您使用发布命令或网站部署工具预编译网站。 WSD 将允许您选择 Debug 或 Release 构建、预编译站点并适当地修改 web.config。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-04-02
            • 1970-01-01
            • 2011-09-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-21
            • 1970-01-01
            相关资源
            最近更新 更多