ASP.NET 2.0中的代码隐藏和编译
。走近 ASP.NET 编译器。
在 ASP.NET 2.0 中,ASP.NET 编译器 (aspnet_compiler.exe) 最初作为完全预编译整个站点的一种方式引入,从而使得只部署二进制程序集成为可能(甚至也对 .aspx 和 .ascx 文件进行预编译)。这是非常吸引人的,因为它消除了发出请求时的任何按需编译,从而消除了目前在一些站点上可以看到的第一个部署后点击。它也使得对已部署站点进行修改更加困难(因为您无法打开 .aspx 文件并更改内容),当部署只想通过标准部署过程更改的应用程序时,这是很吸引人的。ASP.NET 2.0 的发布版本提供的编译器支持仅支持二进制的部署模型,但是它也进行了增强以支持可更新的部署模型,其中站点中的所有源代码预编译为二进制程序集,但是所有 .aspx 和 .ascx 文件都基本保持完整,以便可以在服务器上进行更改(针对 .aspx 和 .ascx 文件的更改,涉及移除的 CodeFile 属性以及进行修改以包括程序集名的 Inherits 属性)。由于在代码隐藏模型中重新引入了继承,因此该模型是可能的。这样,包含控件声明的同辈部分类可以独立于实际的 .aspx 文件类定义生成和编译。 图 4 使用 aspnet_compiler.exe 进行二进制部署 图 4 显示使用二进制部署选项对 aspnet_compiler.exe 实用工具的调用,以及针对部署目录的结果输出。请注意,该部署目录中的 .aspx 文件只是没有内容的标记文件。它们之所以位于那里,是为了确保 IIS 应用程序中 .aspx 扩展的“Check that file exists”选项进行设置后,带有终结点名称的文件可用。PrecompiledApp.config 文件用于跟踪应用程序的部署方式,以及 ASP.NET 是否需要在请求时编译任何文件。要生成“可更新的”站点,需要将一个 -u 添加到命令行,得到的 .aspx 文件将包含它们的原始内容(而不是空的标记文件)。请注意,该功能也可以通过 Visual Studio 2005 的 Build | Publish Web Site 菜单项以图形方式访问,如图 5 所示。该命令行工具和 Visual Studio 都依赖于 System.Web.Compilation 命名空间的 ClientBuildManager 类提供该功能。 图 5 Visual Studio 2005 中的 Build | Publish Web Site 工具 使用手边的 aspnet_compiler 实用工具,您无需担心应用程序的大体部署方式就可使其运行,因为任何站点都能以下面三种方式之一进行部署 — 全源、全二进制或可更新(二进制文件中的源代码和源代码中的 .aspx 文件)— 无需对开发中使用的页面属性或代码文件进行任何更改。这在以前的 ASP.NET 版本中是不可能的,因为您必须在开发时决定是否使用 src 属性来引用代码隐藏文件,或者预编译它们并将程序集部署到 /bin 目录。完整的二进制部署甚至不是一个选项。 程序集生成 既然编译为程序集可以在三种情况下发生(由开发人员显式进行,使用 aspnet_compiler.exe,或者在请求处理中进行),因此了解文件到程序集的映射变得更为重要。实际上,根据编写页面的方式,您实际上可以得到一个应用程序,在作为全源或全二进制部署时,该应用程序可以正常工作,但在使用可更新的切换进行部署时,却编译失败。 模型 ASP.NET 通常使用 App_Code 目录内容的单独程序集以及 global.asax 文件(如果存在),然后将每个目录中的所有 .aspx 页编译为单独的程序集。(如果同一目录中的页面是以不同语言制作的,或者它们通过 @ Reference 指令彼此依赖,则它们也可以形成单独的程序集。)用户控件和母版页通常也独立于 .aspx 页进行编译。例如,如果要在一个项目中包含 Visual Basic? 和 C# 源代码,也可以配置 App_Code 目录来创建多个程序集。在程序集创建的细节中有一些细微差别,这取决于您所选的部署模式。图 6 描述特定 Web 站点的组件,该 Web 站点基于您要使用的部署模式编译 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |