何时在ASP.net中使用<compilation> </compilation>

时间:2010-06-23 09:58:52

标签: asp.net compilation executiontimeout

我在我的应用程序web.config中设置ExecutionTimeout元素时遇到了一些麻烦。

我的网页正在拨打一个冗长的网络服务电话,并在110秒后超时。 (默认我相信)。我将值设置为220,并确保编译debug = false。

编译设置是指IIS / ASP.net在客户端请求时编译ASPX页面的时间,还是引用Visual Studio编译过程创建程序集。

在Visual Studio中使用使用debug构建的程序集是否仍允许上述设置工作?

3 个答案:

答案 0 :(得分:2)

当人们请求时,IIS不会编译aspx页面。如果在VS中有“Web应用程序项目”,则在部署之前编译所有代码隐藏和其他类文件。如果您在VS中有“网站项目”,则Web服务器仅在第一次请求时编译您的应用程序。在其中任何一个发生之后,在您进行更改之前不会再次编译应用程序。

考虑到上面的信息,这是编译debug = true |的时候虚假发挥作用。调试= true后,您可以获得有关错误和其他事件的一些非常详细的信息,但是当调试符号插入到.dll中时,它会使您的应用程序运行速度变慢,并且整体上没有针对性能进行优化。通过设置debug = false,您无法获得完全相同的错误报告级别,但您确实可以获得性能提升。

如果你在VS中构建,它将根据web.config中的设置进行构建,除非它是你所包含的外部.dll / class项目。如果是这种情况,那么web.config设置对于.dll没有任何意义,并且无论你在这两个项目上有什么组合的debug = false | true都会运行。

答案 1 :(得分:1)

编译标记用于添加引用的库以供IIS或Visual Studio编译,并指定调试和批处理编译模式。

说到debug属性,这里有good article以及Milan Negovan博客中的所有细节。

关于编译本身。

有3种编译模式。它们在MSDN Overview中有详细描述。

默认情况下,Web应用程序使用可更新的预编译:所有.cs文件都编译到一个程序集中,但所有页面,控件和母版页都按需编译到新的派生类中。

默认情况下,网站项目使用就地编译。

必须明确指定不可更新的完整预编译。此时compilation标签出现。如果batch="true",则应用程序中的所有页面将在首次请求时编译到任何页面。这将我们带到另一个关于大型应用程序的故事:)

请注意,编译模型中还有其他一些细节,如果您确实需要,请查看ASP.NET Precompilation Overview

答案 2 :(得分:0)

IIS首次请求时编译ASPX页面(和ASCX UserControls,ASHX,ASMX,...)。它还动态编译:

  • App_Code文件夹中的代码

  • 网站项目代码旁边的代码

web.config中的编译元素引用此编译。

如果在Visual Studio中使用Web应用程序项目,则ASPX页面将具有代码隐藏文件。当项目在Visual Studio中构建时,这将编译为DLL,并且不受web.config编译元素的影响。