我试图找到一个明确的解释,说明在.Net 3.5 Web应用程序中,在发布模式下编译的效果与debug =“false”有关。到目前为止看起来设置debug =“false”具有相同的效果,并且在发布模式下的编译已经折旧,但我找不到任何确凿的证据。
这个问题看起来很有希望,但似乎是在回答调试和发布版本之间的区别,而不是发布模式和debug =“true”:
编译debug =“false”和Release模式有什么区别?
但它确实链接到这篇文章:
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">
发布和调试模式编译有什么影响(如果有的话)?
TL; DR =更重要的是编译debug =“true | false”。但是,在Debug中编译对性能也有很小的影响。
Debug和Release之间的区别(除了定义DEBUG常量之外)是“Optimize code”标志,它在Debug中被禁用并在Release中被启用。 (如果查看项目设置,“构建”选项卡。)
“优化代码”标志告诉了 语言编译器 在生成DLL时进行一些优化(比如删除未使用的变量,并省略一些调试符号)。与没有设置标志时相比,这是一个相对较小的性能改进(可能是C ++与C#/ VB的较大影响)和DLL内存使用量的轻微减少。
编译debug =“true”标志告诉 JIT编译器 这个代码应该连接起来进行调试。这会降低多个维度(加载时间,运行时,内存和资源加载)的性能,但可以调试正在运行的代码。
如果您想在生产中获得更详细的堆栈跟踪,那么您可以运行带有编译debug =“false”的Debug构建,但性能差异很小。但我会测试两者的表现,以确保你不会失去太多。
信用证属于 这个答案 链接到 这篇博客文章,后来我发现了 这个,其中包含所有这些信息。
你必须小心你的选择。有“Web应用程序”和“Web站点”项目。
“网站”项目没有“发布”配置。网站仅使用web.config的编译部分中的调试设置。如果您打开“网站”,请注意“配置管理器”中唯一列出的配置是“调试”。您可以从项目的“MSBuild选项”属性页或“发布网站”对话框中控制编译。
配置“发布”和“调试”按预期用于“Web应用程序”项目。
“发布”模式和“调试”模式背后的想法是,在调试模式下,编译包含调试符号,这对调试很有用,但对生产没有用,因为它会减慢进程。
但是,“释放”模式会删除这些调试符号,因此该过程运行正常,没有任何问题。
现在,Microsoft在Web应用程序项目中实现了上述模型,而网站项目略有不同。希望这可以帮助。
这是区别。如果你的web.config文件中有这个:
<system.web>
<compilation debug="true" .../>
然后你选择 Release
从Visual Studio中的下拉列表(注意它们是冲突的),是否所有内容都将在调试模式或发布模式下编译?
Visual Studio对编译Web应用程序一无所知。构建一个Web应用程序并检查 bin
文件夹,你会发现它是空的。那是因为ASP.NET编译它。 ASP.NET将使用 compilation debug
从配置文件中标记出来如何编译 .cs
文件,构建表单和用户控件等。它还将使用此标志来决定是否应执行捆绑和缩小。
本文 总结得非常好:
总之,您可以使用web.config中编译部分的debug属性来控制调试和发布版本 - 除非您使用“发布”命令或“网站部署”工具预编译网站。 WSD将允许您选择Debug或Release构建,预编译站点,并适当地修改web.config。