ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

应用程序代码提供用户请求之前,ASP.NET 必须把代码编译进一个或多个汇编集。汇编集以文件的形式存在,扩展名是 .dll。可以使用 Visual Basic,C#,J#,等不同语言编写 ASP.NET 代码。代码一旦被编译,会转换成不受任何语言和 CPU 约束 的 Microsoft 中间语言(MSIL)代表。运行时态的 MSIL 运行在 .NET Framework 上下文环境中,并转换成与特定 CPU 相关的指令集。

对应用程序代码进行编译的好处如下:

  • 性能。已编译代码的执行效率远远高于脚本语言(ECMAScript 或 VBScript),因为作为被封装的机器码代表,无须进行额外的处理就可以直接运行。

  • 安全性。由于缺乏可读性和与高级语言的分离性,已编译代码比源码更难以用于反译工程。另外,还有一些使已编译代码在反译操作时变得更稳固的工具。

  • 稳定性。代码在编译时会检查语法错误,类型安全性等其他问题。在建立时捕获这些错误可以排除代码中的许多错误。

  • 互操作性。MSIL 代码支持任何一种 .NET 编程语言,可以在代码中使用由任何语言编写的汇编集。比如,可以在用 C# 编写的 ASP.NET Web 页面中添加对 Visual Basic 所编写的 .dll 引用。

下面列出 ASP.NET 汇编机制的一些特征:

  • 多语言支持。
  • 自动编译。
  • 灵活布署。
  • 可扩展的建立系统。

下面分别对这些特征的进行描述。

多语言支持

在 ASP.NET 2.0 中可以在同一个应用程序中使用不同的编程语言(Visual Basic 和 C#),ASP.NET 会为每种语言创建不同的汇编集。在 App_Code 目录中创建不同的子目录可以存储不同语言所创建的代码文件。

自动编译

ASP.NET 在用户第一次请求网站资源时会自动编译应用程序代码和其他相关资源。通常,ASP.NET 为每个应用目录(如 App_Code)都创建一个汇编集。如果同一目录中的文件使用了不同的编程语言,则会分别创建不同的汇编集。Web.config 文件中的 Compilation 部分可以指定需要编译进同一汇编集的目录。

灵活布署

由于 ASP.NET 总是在用户发送第一次请求时自动编译网站,所以只需要把应用程序源代码拷贝到目标 Web 服务器即可完成布署。但是,ASP.NET 仍然提供了在网站布署前进行预编译的配置选项,或者在布署后没有被用户请求之前进行编译。使用预编译有几个好处:由于避免了 ASP.NET 编译网站时的时间消耗,增加了网站对第一个请求的处理性能;预编译还有助于提前发现页面中的错误;最后,在网站布署之前进行预编译可以省去源代码的布署工作。

ASP.NET 编译器工具(ASPNET_Compiler.exe)专门用于网站的预编译。该工具提供了下列预编译选项:

  • 原地编译。该选项完成与动态编译相同的工作。用于编译已布署到目标服务器的网站。

  • 只读性完整编译。该选项用于编译应用程序并将输出结果复制到目标服务器。所有应用程序代码,标记,以及 UI 代码都被编译进汇编集。而像 .aspx 一类的占位符文件则单独存在,以用来完成文件中的特定任务,但是不允许更新文件中的代码。如果需要更新页面或代码,则需要重新预编译并布署网站。

  • 可更新编译。与只读性完整预编译类似,除了 UI 代码以及内嵌代码以外, .aspx 页面和 .ascx 控件等 UI 元素都会保留标记内容,也可以在布署之后更新其中的标记代码;ASP.NET 会自动检测文件的更改并重新编译。另外像在预编译时被建立到汇编集中代码分离文件(.vb 或 .cs 文件),就无法在重新编译和布署之前进行任何更改。

可扩展的建立系统

ASP.NET 通过 BuildProvider 类的使用来建立 .aspx 页面,.ascx 文件,以及全局资源。可以创建 BuildProvider 的派生类扩展并自定义 ASP.NET 的建立系统来编译自定义资源。比如,添加一个新的自定义文件类型,并编写新的 BuildProvider 派生类来建立它们。

posted on 2006-12-07 18:00  Laeb  阅读(671)  评论(0编辑  收藏  举报