我试图找到一个明确的解释,说明在.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">
发布和调试模式编译有什么影响(如果有的话)?
答案 0 :(得分:6)
TL; DR =更重要的是编译debug =“true | false”。但是,在Debug中编译也会对性能产生轻微影响。
Debug和Release之间的区别(除了定义DEBUG常量之外)是“Optimize code”标志,它在Debug中被禁用并在Release中被启用。 (如果查看项目设置,“构建”选项卡。)
“优化代码”标志告诉语言编译器在生成DLL时进行一些优化(如删除未使用的变量,并省略一些调试符号)。与没有设置标志的情况相比,这是一个相对较小的性能改进(可能是C ++对C#/ VB的影响较大),并且DLL内存使用量略有减少。
编译debug =“true”标志告诉 JIT编译器应该连接此代码以进行调试。这会降低多个维度(加载时间,运行时,内存和资源加载)的性能,但可以调试正在运行的代码。
如果您想在生产中获得更详细的堆栈跟踪,那么您可以使用编译debug =“false”运行Debug构建,但性能差异很小。但我会测试两者的表现,以确保你不会损失太多。
积分属于this answer,其链接到this blog entry,后来我找到this one,其中包含所有这些信息。
答案 1 :(得分:5)
你必须小心你的选择。有“Web应用程序”和“网站”项目。
“网站”项目没有“发布”配置。网站仅使用web.config的编译部分中的调试设置。如果您打开“网站”,请注意“配置管理器”中唯一列出的配置是“调试”。您可以从项目的“MSBuild选项”属性页或“发布网站”对话框中控制编译。
配置“发布”和“调试”按预期用于“Web应用程序”项目。
答案 2 :(得分:1)
“发布”模式背后的理念&amp; 'Debug'模式是,在调试模式下,编译包含调试符号,这对调试很有用,但不适用于生产,因为它会减慢过程。
但是,“Release”模式会删除这些调试符号,因此该过程运行正常,没有任何问题。
现在,Microsoft在Web应用程序项目中实现了上述模型,而网站项目略有不同。希望这会有所帮助。
答案 3 :(得分:0)
这是区别。如果你在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中编译部分的debug属性来控制调试和发布版本 - 除非您使用“发布”命令或“网站部署”工具预编译网站。 WSD将允许您选择Debug或Release构建,预编译站点,并适当地修改web.config。