第1章 ASP.NET 2.0概述 ASP.NET是一个统一的Web开发模型,可以使用尽可能少的代码生成企业级Web 应用程序所必需的各种服务。ASP.NET作为.NET Framework的一部分提供。当编写ASP.NET应用程序的代码时,可以访问.NET Framework中的类。可以使用与公共语言运行库 (CLR) 兼容的任何语言来编写应用程序的代码,这些语言包括 Microsoft Visual Basic、C#、JScript .NET 和 J#。使用这些语言,可以开发利用公共语言运行库、类型安全、继承等方面的优点的ASP.NET应用程序。 Microsoft .NET Framework 2.0版在各个方面都对ASP.NET进行了显著增强。大多数常见Web应用程序开箱即可使用。使建立网站和网页并维持其运行比以前变得更加简单,而且使用的代码也比以前更少。同时,还可以根据自己的需求向ASP.NET添加自定义功能。 本章介绍.NET Framework、Visual Studio集成开发环境、ASP.NET Web应用程序以及如何使用Visual Studio 2005集成开发环境创建基于C#语言的ASP.NET Web应用程序、发布ASP.NET Web应用程序。 1.1 .NET Framework .NET Framework是.NET的核心部分,它提供了.NET应用程序所需的核心服务,是开发配置和运行分布式的Web服务和Web应用的基础平台。 1.1.1 概述 .NET Framework是支持生成和运行下一代应用程序和XML Web Services的内部Windows 组件。.NET Framework旨在实现如下目标。 ● 提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在互联网上分布,或者是在远程执行的。 ● 提供一个将软件部署和版本控制冲突最小化的代码执行环境。 ● 提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。 ● 提供一个可消除脚本环境或解释环境性能问题的代码执行环境。 ● 使开发人员的经验在面对类型大不相同的应用程序(如基于Windows的应用程序和基于Web的应用程序)时保持一致。 ● 按照工业标准生成所有通信,以确保基于.NET Framework的代码可与任何其他的代码集成。 .NET Framework具有两个主要组件:公共语言运行库和.NET Framework类库。 公共语言运行库是.NET Framework的基础。可以将运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。 .NET Framework的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面(GUI)应用程序,也包括基于ASP.NET所提供的创新的应用程序(如Web 窗体和 XML Web services)。 .NET Framework可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework不但提供了若干个运行库宿主,而且还支持第三方运行库宿主的开发。例如,ASP.NET承载运行库为托管代码提供可伸缩的服务器端环境。并直接使用运行库来启用ASP.NET应用程序和XML Web services。 Internet Explorer是承载运行库(以MIME 类型扩展的形式)的非托管应用程序的一个示例。使用Internet Explorer承载运行库能够在HTML文档中嵌入托管组件或Windows 窗体控件。以这种方式承载运行库使得托管移动代码类似于(Microsoft ActiveX控件)成为可能,不过它需要进行重大改进(如不完全受信任的执行和独立的文件存储),而这种改进只有托管代码才能提供。 1.1.2 公共语言运行库 .NET Framework提供了一个称为公共语言运行库的运行时环境,它运行代码并提供使开发过程更轻松的服务。公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。这些功能是在公共语言运行库上运行的托管代码所固有的。 运行库的安全性取决于包括托管组件来源(如互联网、企业网络或本地计算机)在内的一些因素,托管组件被赋予不同程度的信任。这意味着即使在同一活动应用程序中,托管组件既可能能够执行文件访问操作、注册表访问操作或其他需要小心使用的功能,也可能不能够执行这些功能。运行库强制实施代码访问安全。例如,用户可以相信嵌入在网页中的可执行文件能够在屏幕上播放动画或唱歌,但不能访问他们的个人数据、文件系统或网络。这样,运行库的安全性功能就使通过互联网部署的合法软件能够具有特别丰富的功能。运行库还通过实现称为通用类型系统 (CTS) 的严格类型验证和代码验证基础结构来加强代码的可靠性。CTS确保所有托管代码都是可以自我描述的。各种Microsoft和第三方语言编译器生成符合CTS的托管代码。这意味着托管代码可在严格实施类型保真和类型安全的同时使用其他托管类型和实例。 另外,运行库的托管环境还消除了许多常见的软件问题。例如,运行库自动处理对象布局并管理对象的引用,在不再使用它们时将它们释放。这种自动内存管理解决了两个最常见的应用程序错误:内存泄漏和无效内存引用。公共语言运行库自动处理对象布局并管理对象引用,当不再使用对象时释放它们。按这种方式实现生存期管理的对象称为托管数据。垃圾回收消除了内存泄漏以及其他一些常见的编程错误。如果编写的代码是托管代码,则可以在.NET Framework应用程序中使用托管数据、非托管数据或者同时使用这两种数据。由于语言编译器会提供自己的类型(如基元类型),因此并不需要知道这些数据是否是托管的。 运行库还提高了开发人员的工作效率。例如,程序员可以用他们选择的开发语言编写应用程序,同时仍能充分利用其他开发人员以其他语言编写的运行库、类库和组件。任何选择以运行库为目标的编译器供应商都可以这样做。以.NET Framework为目标的语言编译器使得用该语言编写的现有代码可以使用.NET Framework的功能,这大大减轻了现有应用程序的迁移过程的工作负担。 尽管运行库是为未来的软件设计的,但是它也支持现在和以前的软件。托管和非托管代码之间的互操作性使开发人员能够继续使用所需的COM和DLL组件。 运行库旨在增强性能。尽管公共语言运行库提供了许多标准运行库服务,但是它从不解释托管代码。一种称为实时(JIT)编译的功能使所有托管代码能够以它在其上执行的系统的本机语言来运行。同时,内存管理器排除了出现零碎内存的可能性,并增大了内存引用区域以进一步提高性能。 运行库可由高性能的服务器端应用程序(如Microsoft SQL Server和Internet信息服务 (IIS))承载。此基础结构使在享受支持运行库宿主的服务器的优越性能的同时,能够使用托管代码编写业务逻辑。 若要使公共语言运行库能够向托管代码提供服务,语言编译器必须生成一些元数据来描述代码中的类型、成员和引用。元数据与代码一起存储;每个可加载的公共语言运行库可移植执行 (PE) 文件都包含元数据。公共语言运行库使用元数据来完成以下任务:查找和加载类、在内存中安排实例、解析方法调用、生成本机代码、强制安全性以及设置运行时上下文边界。 有了公共语言运行库,就可以很容易地设计出对象能够跨语言交互的组件和应用程序。也就是说,用不同语言编写的对象可以互相通信,并且它们的行为可以紧密集成。例如,可以定义一个类,然后使用不同的语言从原始类派生出另一个类或调用原始类的方法。还可以将一个类的实例传递到用不同的语言编写的另一个类的方法。这种跨语言集成之所以成为可能,是因为基于公共语言运行库的语言编译器和工具使用由公共语言运行库定义的通用类型系统,而且它们遵循公共语言运行库关于定义新类型以及创建、使用、保持和绑定到类型的规则。 所有托管组件都带有生成它们所基于的组件和资源的信息,这些信息构成了元数据的一部分。公共语言运行库使用这些信息确保组件或应用程序具有它需要的所有内容的指定版本,这样就使代码不太可能由于某些未满足的依赖项而发生中断。注册信息和状态数据不再保存在注册表中(因为在注册表中建立和维护这些信息很困难)。取而代之的是,有关定义的类型(及其依赖项)的信息作为元数据与代码存储在一起,这样大大降低了组件复制和移除任务的复杂性。 语言编译器和工具公开公共语言运行库的功能的方式对于开发人员来说不仅很有用,而且很直观。这意味着,公共语言运行库的某些功能可能在一个环境中比在另一个环境中更突出。例如,可以使用 C# 语言编写托管代码。C# 语言提供了如下优点。 ● 完全面向对象的设计。 ● 非常强的类型安全。 ● 很好地融合了Visual Basic的简明性和C++的强大功能。 ● 垃圾回收。 ● 类似于C和C++的语法和关键字。 ● 使用委托取代函数指针,从而增强了类型安全性。函数指针通过unsafe C# 关键字和 C#编译器 (Csc.exe) 的 /unsafe 选项可用于非托管代码和数据。 1.1.3 .NET Framework类库 .NET Framework类库是一个与公共语言运行库紧密集成的可重用的类型集合。该类库是面向对象的,并提供用户的托管代码可从中导出功能的类型。这不但使.NET Framework类型易于使用,而且还减少了学习.NET Framework新功能所需要的时间。此外,第三方组件可与.NET Framework中的类无缝集成。 例如,.NET Framework集合类实现一组可用于开发用户的集合类的接口。用户的集合类将与.NET Framework中的类无缝地混合。 正如对面向对象的类库所希望的那样,.NET Framework类型能够完成一系列常见编程任务(包括诸如字符串管理、数据收集、数据库连接以及文件访问等任务)。除此之外,类库还包括支持多种专用开发方案的类型。例如,可使用.NET Framework开发下列类型的应用程序和服务。 ● 控制台应用程序。 ● Windows GUI应用程序(Windows 窗体)。 ● ASP.NET 应用程序。 ● XML Web services。 ● Windows服务。 例如,Windows窗体类是一组综合性的可重用的类型,它们大大简化了Windows GUI的开发。如果要编写ASP.NET Web窗体应用程序,可使用Web窗体类。 .NET Framework包括类、接口和值类型,它们可加速和优化开发过程并提供对系统功能的访问。为便于语言之间进行交互操作,.NET Framework类型是符合CLS的,并可在任何编程语言中使用,只要这种语言的编译器符合公共语言规范 (CLS)。 .NET Framework类型是生成.NET应用程序、组件和控件的基础。.NET Framework 包括的类型执行下列功能。 ● 表示基础数据类型和异常。 ● 封装数据结构。 ● 执行 I/O。 ● 访问关于加载类型的信息。 ● 调用.NET Framework安全检查。 ● 提供数据访问、多客户端GUI和服务器控制的客户端GUI。 .NET Framework包含一组丰富的接口以及抽象类和具体类,它提供了上百个类来处理各种操作,从简单的数学运算和字符串操作到在桌面应用中创建对话框及在浏览器中创建 Web 页面等的高层操作。可以按原样使用这些具体的类,或者从这些类派生自己的类。若使用接口的功能,既可以创建实现接口的类,也可以从某个实现接口的.NET Framework类中派生类。下面介绍一下.NET Framework类库中的命名约定和基本类型的命名空间。 1. 命名约定 .NET Framework类型使用点语法命名方案,该方案隐含了层次结构的意思。此技术将相关类型分为不同的命名空间组,以便可以更容易地搜索和引用它们。全名的第一部分(最右边的点之前的内容)是命名空间名。最后一部分是类型名。例如,System.Collections.ArrayList表示ArrayList类型,该类型属于System.Collections命名空间。System.Collections中的类型可用于操作对象集合。 此命名方案使扩展.NET Framework的库开发人员可以轻松创建分层类型组,并用一致的、带有提示性的方式对其进行命名。库开发人员在创建命名空间的名称时应使用下面的原则。 “公司名称.技术名称” 例如,Microsoft.Word 命名空间就符合此原则。 利用命名模式将相关类型分组为命名空间是生成和记录类库的一种非常有用的方式。但是,此命名方案对可见性、成员访问、继承、安全性或绑定无效。一个命名空间可以被划分在多个程序集中,而单个程序集可以包含来自多个命名空间的类型。程序集为公共语言运行库中的版本控制、部署、安全性、加载和可见性提供了外形结构。 2. System命名空间 命名空间是.NET Framework中基本类型的根命名空间。此命名空间包括表示由所有应用程序使用的基础数据类型的类:Object(继承层次结构的根)、Byte、Char、Array、Int32和 String等。在这些类型中,有许多与编程语言所使用的基元数据类型相对应。当使用.NET Framework类型编写代码时,可以在应使用.NET Framework基础数据类型时使用编程语言的相应关键字。 System命名空间包含基本类和基类,这些类定义常用的值和引用数据类型、事件和事件处理程序、接口、属性和异常处理。 其他类提供的服务支持数据类型转换、方法参数操作、数学运算、远程和本地程序调用、应用程序环境管理以及对托管与非托管应用程序的监控。 1.2 Visual Studio集成开发环境 Visual Studio 2005是一套完整的开发工具集,用于生成ASP.NET Web应用程序、XML Web Services、桌面应用程序和移动应用程序。Visual Basic、Visual C++、Visual C# 和 Visual J# 全都使用相同的集成开发环境 (IDE),利用此IDE可以共享工具且有助于创建混合语言解决方案。另外,这些语言利用了.NET Framework的功能,通过此框架可使用简化ASP.NET Web应用程序和XML Web Services开发的关键技术。 1.2.1 解决方案、项目和项 Visual Studio 2005提供了两类容器,帮助有效地管理开发工作所需的项,如引用、数据连接、文件夹和文件。这两类容器分别称为解决方案和项目。此外,Visual Studio 2005还提供解决方案文件夹,用于将相关的项目组织成项目组,然后对这些项目组执行操作。作为查看和管理这些容器及其关联项的界面,“解决方案资源管理器”是集成开发环境(IDE)的一部分。 为了使集成开发环境(IDE)能够应用它的各种工具、设计器、模板和设置,Visual Studio 2005实现了概念上的容器(称为解决方案和项目)。另外,还提供了解决方案文件夹,用于将相关的项目组织成组,然后对这些项目组执行操作。 项目包含一组源文件以及相关的元数据,如组件参考和生成说明。生成项目时通常会生成一个或多个输出文件。解决方案包含一个或多个项目,以及帮助在整体上定义解决方案的文件和元数据。 创建新项目时,Visual Studio 2005会自动生成一个解决方案。然后,根据需要将其他项目添加到该解决方案中。“解决方案资源管理器”提供整个解决方案的图形视图,开发应用程序时,该视图可帮助管理解决方案中的项目和文件,也可以创建不包含项目的空白解决方案,从而使用Visual Studio 2005编辑器和设计器修改独立的文件。“解决方案资源管理器”专门为非项目项提供文件夹。 1. 解决方案 解决方案管理Visual Studio配置、生成和部署相关项目集的方式。Visual Studio解决方案可以只包含一个项目,也可以包含由开发小组联合生成的多个项目。复杂的应用程序可能需要多个解决方案。 使用“解决方案生成配置”可以指定如何为特定的用户组生成和部署不同的应用程序版本。例如,为开发人员和测试人员配置调试版本,为合作伙伴和最终用户配置发布版本。 解决方案使开发人员能够集中精力开发和部署项目,而不用考虑项目文件、组件和对象管理的具体细节。每个Visual Studio 2005解决方案都可作以下应用。 ● 在IDE的同一实例中处理多个项目。 ● 使用应用于整个项目集的设置和选项来处理项。 ● 使用“解决方案资源管理器”帮助开发和部署应用程序。 ● 管理在解决方案或项目环境的外部打开的其他文件。 Visual Studio 2005将解决方案的定义存储在.sln 和.suo文件中。解决方案定义文件 (.sln)存储定义解决方案的元数据,包括如下内容。 ● 解决方案相关项目。 ● 在解决方案级可用的、与具体项目不关联的项。 ● 设置各种生成类型中应用的项目配置的解决方案生成配置。 每当进行解决方案活动时,都使用构建该解决方案并设置其属性时存储在.suo文件中的元数据来自定义IDE。例如,如果启用了“杂项文件”选项,“解决方案资源管理器”就会显示解决方案的一个“杂项文件”文件夹,“工具箱”中适用于该解决方案中包含的项目类型工具也变得可用。.sln文件可以在开发小组的开发人员之间共享。而.suo 文件是用户特定的文件,不能在开发人员之间共享。 2. 项目 为了便于对正在开发的项进行组织和执行常规任务,将Visual Studio项目用作解决方案内的容器,以通过逻辑方式管理、生成和调试构成应用程序的项。项目的输出通常是可执行程序 (.exe)、动态链接库(.dll)文件或模块等。 项目可以简单,也可以复杂。一个简单的项目可能由一个窗体或HTML文档、源代码文件和一个项目文件组成。更加复杂的项目可能由这些项以及数据库脚本、存储过程和对现有XML Web Services的引用组成。 所有Visual Studio的开发产品都提供了许多预定义的项目模板。可以使用这些项目模板之一创建基本项目容器以及一组开发应用程序、类、控件或库可能需要的预备项。例如,如果选择创建Windows应用程序,则项目会提供可自定义的Windows 窗体项。同样,如果选择创建一个Web 应用程序,则项目将会提供一个Web窗体项。 项目及其模板使开发人员得以集中精力于要实现的特定功能,因为该项目处理通用管理和生成任务。可以使用提供的默认设置,也可自定义自己的生成配置,还可以创建自己的模板。 每个项目模板创建并维护一个项目文件,以存储针对该项目的元数据。当在集成开发环境 (IDE) 内工作时,系统创建并维护此项目文件。该项目文件的扩展名和实际内容由它所定义的项目类型确定。通常,项目文件存储为该项目及其项的集合指定的配置和生成设置。一些项目保存一列与项目关联的文件及文件的位置。向项目中添加项时,其物理源文件在磁盘上的位置也添加到项目文件中。当从项目中移除该链接时,此信息将从定义文件中删除。每个项目模板确定对每个项可用的命令。 3. 项 项可以是文件和项目的其他部分,如引用、数据连接或文件夹。在“解决方案资源管理器”中,项可以按如下方式进行组织。 ● 作为项目项(项目项是构成项目的项),如“解决方案资源管理器”中项目内的窗体、源文件和类。组织和显示方式取决于所选的项目模板以及所做的所有修改。 ● 作为文件的解决方案项,适用于整个解决方案,位于“解决方案资源管理器”的“解决方案项”文件夹中。 ● 作为文件的杂项文件,它们与项目或解决方案都不关联,可显示在“杂项文件”文件夹中。 1.2.2 生成、调试和测试 生成、调试和测试是开发和完成可靠的应用程序、组件和服务的关键活动。Visual Studio 2005提供的工具旨在使开发人员能够控制生成配置,高效地识别和解决错误并且以各种方式测试生成。 Visual Studio 2005提供了一些用于在生成应用程序时对其进行连续测试和调试的工具。在创建每个Visual Studio项目时,会定义默认的项目配置并分配默认的解决方案生成配置,以便在生成时提供上下文。开发组可以根据需要编辑这些默认的解决方案配置和项目配置,并通过保存这些默认配置的已修改副本创建新的配置。 解决方案及其各个项目通常在“调试”版本中生成并测试。开发人员将反复编译“Debug”版本(在开发过程的每一步都将进行此操作)。调试过程分为两步。首先,纠正编译时的错误。这些错误可以包含不正确的语法、拼错的关键字以及输入不匹配。接下来,使用调试器检测并纠正在运行时检测到的逻辑错误和语义错误等问题。 在项目或解决方案完全开发并充分调试后,在“发布”版本中编译其组件。默认情况下,“Release”版本使用各种优化。经过优化的版本比未经优化的版本小且运行速度更快。 对象测试工作台 (OTB) 是为简单的对象级测试而设计的。使用OTB可以创建项目的对象实例、调用方法和计算结果。这样可以缩短编写代码、调试然后重新编写代码的任务的时间。Visual C#、Visual Basic和 Visual J# 都支持在OTB中的测试方法。OTB包括一个工具窗口以及一系列用于与类设计器或类视图中的显示的对象交互和处理这些对象的对话框。OTB可用于下面的任务。 ● 不深入学习编程语言就可以讲授面向对象的编程概念。 ● 提供为学习和编程爱好者设计的轻量测试工具,可在简单的小项目上使用。 ● 缩短编写代码-调试-重新编写代码的循环。 ● 测试简单的类和类方法。 ● 快速发现库API的行为。 1.2.3 对ASP.NET 2.0的支持 Microsoft Visual Studio 2005 包含Microsoft Visual Web Developer Web开发工具,它是一组实用工具,用于创建 ASP.NET 2.0版网站。Visual Web Developer在支持网站创建方面进行了重要改进。Visual Web Developer除了具有集成开发环境 (IDE) 在工作效率方面的优点以外,还进行了如下的大量改进。 ● 支持ASP.NET 2.0:Visual Web Developer支持新的ASP.NET 2.0功能,包括 ASP.NET 2.0中引入的很多新控件。此外,Visual Web Developer与本机 ASP.NET 2.0 功能相当一致,没有添加特定于设计器的功能。例如,Visual Web Developer没有将特定于设计器的标记嵌入ASP.NET 2.0页。 ● 更为灵活的项目选项和部署选项:使用Visual Web Developer可以在本地和远程计算机上的 IIS 根中创建传统的Microsoft Internet信息服务 (IIS) 应用程序,此外还支持虚拟根,支持使用文件传输协议 (FTP) 打开网站,支持使用项目之外的独立文件。所有这些改进,使ASP.NET 2.0应用程序的创建和部署变得相当容易。 ● 改进的代码隐藏模型:Visual Web Developer可以通过使用新的代码隐藏模型或将代码包含在ASP.NET页(.aspx 文件)中两种方式创建页。 ● 改进的编程功能:大大简化了许多基本任务。例如,无须编写任何代码就能创建数据绑定页。新的ASP.NET 2.0控件增加了一些重要功能,这些功能在过去是需要自己编写代码才能实现的。Microsoft IntelliSense和相关技术经过扩展,几乎能用于任何地方。 ASP.NET 2.0构建在.NET Framework 2.0之上,它扩展了ASP.NET 1.0和ASP.NET 1.1的功能。ASP.NET 2.0中得到改进的特定方面如下。 ● 生产效率:使用新增的ASP.NET服务器控件和包含新增功能的现有控件,可以轻松、快捷地创建ASP.NET网页和应用程序。新增内容(诸如成员资格、个性化和主题)可以提供系统级的功能,此类功能通常会要求开发人员进行大量的编写代码工作。新增数据控件、无代码绑定和智能数据显示控件已经解决了核心开发方案(尤指数据)问题。 ● 灵活性和可扩展性:很多ASP.NET功能都可以扩展,这样就可以轻松地将自定义功能集成到应用程序中。例如,ASP.NET提供程序模型为不同数据源提供插入支持。 ● 性能:使用诸如预编译、可配置的缓存和SQL缓存失效等功能,可以优化Web 应用程序的性能。 ● 安全性:现在向Web应用程序添加身份验证和授权比以往任何时候都简单。 ● 宿主:ASP.NET中包含的新增功能使得管理宿主环境变得更加简单,从而为宿主主体创建了更多增值的机会。 ● 完整性:新增功能和现有功能协同工作,可以创建解决实时Web开发挑战的端对端方案。 1.3 ASP.NET Web应用程序 若要开发ASP.NET Web应用程序(也称为网站),必须备有以下工具。 ● .NET Framework 2.0:若要使用 ASP.NET,则在承载ASP.NET网站的计算机上必须安装 .NET Framework 2.0。 ● 代码创作环境:可以使用任何文本编辑器(如记事本)创建ASP.NET页和类。不过,Microsoft Visual Studio和其他集成开发环境(IDE) 提供了页模板、IntelliSense、代码自动完成和设计时编译等许多编程功能。这些功能可以加速开发过程并提供项目组织功能。 ● 一个Web服务器(如IIS)和将文件写入该 Web 服务器的权限。若要使用ASP.NET Web应用程序,必须使用浏览器向承载应用程序的 Web 服务器发出请求。通常,使用IIS 作为Web服务器来承载ASP.NET Web 应用程序。可以通过在计算机上本地运行 IIS 或将页和组件部署到共享服务器来测试应用程序。 如果使用的是Visual Studio 2005,则可以使用ASP.NET Development Server 来测试ASP.NET网页。ASP.NET Development Server在计算机上本地运行页,而无须安装 IIS。若要将IIS作为Web服务器使用,作为运行身份的用户账户必须具有写入应用程序所在目录的权限,无论该目录是Web服务器根的子目录还是虚拟目录。只要安装了 IIS,则在安装.NET Framework时会在IIS中注册ASP.NET ISAPI 扩展名(Aspnet_isapi.dll)。如果在已经安装了.NET Framework的情况下安装IIS,则必须使用 Aspnet_regiis.exe 实用工具在IIS中注册 ASP.NET。 在使用Visual Studio 2005创建ASP.NET网站时,可以包含ASP.NET能够识别的以进行处理特定类型的文件。此外,还可以创建用于特殊用途(如用于存储源代码)的文件夹。 1.3.1 ASP.NET 网站的布局 可以将网站的文件保存在方便应用程序访问的任何文件夹结构中。为了更易于使用应用程序,ASP.NET保留了某些可用于特定类型内容的文件和文件夹名称。 可以为应用程序建立默认页,这将使用户更容易定位到站点。默认页是在用户定位到站点时没有指定特定页情况下为用户提供的页。例如,可以创建一个名为 Default.aspx 的页,并将它保存在站点的根文件夹中。如果用户在定位到站点时没有指定特定页,则可以配置应用程序,以便自动请求Default.aspx页。可以使用默认页作为站点的主页,或者在页中写入代码来将用户重定向到其他页。在IIS中,默认页是作为网站的属性来创建的。 ASP.NET 能识别可用于特定类型内容的某些文件夹名称。表1-1列出了保留的文件夹名称以及文件夹中通常包含的文件类型。应用程序文件夹(App_Themes 文件夹除外)的内容并不在响应Web请求时提供,但可以从应用程序代码来进行访问。 表 1-1 ASP.NET应用程序文件夹表 名 称 说 明 App_Browsers 包含ASP.NET用于标识个别浏览器并确定其功能的浏览器定义 (.browser) 文件。 App_Code 包含作为应用程序的一部分进行编译的实用工具类和业务对象(例如 .cs、.vb 和 .jsl 文件)的源代码。在动态编译的应用程序中,当对应用程序发出首次请求时,ASP.NET 编译 App_Code 文件夹中的代码。然后在检测到任何更改时重新编译该文件夹中的项。可以在 App_Code 文件夹中放置任意文件类型以创建强类型对象。在应用程序中将自动引用 App_Code 文件夹中的代码。此外,App_Code 文件夹可以包含需要在运行时编译文件的子目录 App_Data 包含应用程序数据文件,包括 MDF 文件、XML 文件和其他数据存储文件。ASP.NET 2.0 使用 App_Data 文件夹来存储应用程序的本地数据库,该数据库可用于维护成员资格和角色信息 App_GlobalResources 包含编译到具有全局范围的程序集中的资源(.resx和.resources文件)。App_GlobalResources 文件夹中的资源是强类型的,可以通过编程方式进行访问 App_LocalResources 包含与应用程序中的特定页、用户控件或母版页关联的资源(.resx 和 .resources 文件) App_Themes 包含用于定义 ASP.NET 网页和控件外观的文件集合(.skin 和 .css 文件以及图像文件和一般资源) App_WebReferences 包含用于定义在应用程序中使用的 Web引用协定文件(.wsdl 文件)、架构(.xsd 文件)和发现文档文件(.disco 和 .discomap 文件) Bin 包含要在应用程序中引用的控件、组件或其他代码的已编译程序集(.dll 文件)。在应用程序中将自动引用 Bin 文件夹中的代码所表示的任何类 站点的配置设置可以通过Web.config文件进行管理,该文件位于站点的根文件夹中。如果在子文件夹中包含文件,则可以通过在该文件夹中创建Web.config文件来为这些文件维护单独的配置设置。如果配置设置作为整体应用于站点,则不能对子文件夹级别设置或重写这些设置。 使用ASP.NET配置系统的功能,可以配置整个服务器、ASP.NET应用程序或应用程序子目录中的单个页。可以配置的功能包括身份验证的模式、页面缓存、编译器选项、自定义错误、调试和跟踪选项等。 ASP.NET配置系统的功能是一个可扩展的基础结构,该基础结构使得能够在一些容易部署的XML文件中定义配置设置。这些文件(每个文件都名为 Web.config)可以存在于ASP.NET应用程序中的多个位置中。在任何时候都可以添加或修订配置设置,且对运行的Web应用程序和服务器产生最小的影响。 1.3.2 网站文件的类型 网站应用程序中可以包含很多文件类型,某些文件类型由ASP.NET支持和管理,而其他文件类型则由IIS服务器支持和管理。 大多数ASP.NET文件类型都可以使用Visual Web Developer中的“添加新项”菜单项自动生成。 使用应用程序映射可以将文件类型映射到应用程序。例如,当打开一个具有 .txt 文件扩展名的文件时,很可能会打开记事本应用程序,因为默认情况下.txt文件类型已映射到Notepad.exe。在Web应用程序中,文件类型会映射到IIS中的应用程序扩展。由ASP.NET管理的文件类型会映射到IIS中的Aspnet_isapi.dll。ASP.NET管理的文件类型说明,如表1-2所示。 表 1-2 ASP.NET管理的文件类型表 文 件 类 型 位 置 说 明 .asax 应用程序根目录 通常是Global.asax文件,该文件包含从HttpApplication <>类派生并表示该应用程序的代码 .ascx 应用程序根目录或子目录 Web 用户控件文件,该文件定义自定义、可重复使用的用户控件 .ashx 应用程序根目录或子目录 一般处理程序文件,该文件包含实现 接口来处理所有传入请求的代码 .asmx 应用程序根目录或子目录 XML Web services文件,该文件包含通过 SOAP 方式可用于其他Web应用程序的类和方法 .aspx 应用程序根目录或子目录 ASP.NET Web窗体文件,该文件可包含Web控件和其他业务逻辑 .axd 应用程序根目录 跟踪查看器文件,通常是Trace.axd .browser App_Browsers子目录 浏览器定义文件,用于标识客户端浏览器的启用功能 .cd 应用程序根目录或子目录 类关系图文件 .compile Bin 子目录 预编译的 stub(存根)文件,该文件指向相应的程序集。可执行文件类型(.aspx、ascx、.master、主题文件)已经过预编译并放在 Bin 子目录下 .config 应用程序根目录或子目录 通常是 Web.config 配置文件,该文件包含其设置配置各种 ASP.NET 功能的 XML 元素 .cs、.jsl、.vb App_Code子目录;但如果是ASP.NET页的代码隐藏文件,则与网页位于同一目录 运行时要编译的类源代码文件。类可以是HTTP模块、HTTP处理程序,或者是ASP.NET页。HTTP处理程序介绍的代码隐藏文件 .csproj、.vbproj、vjsproj Visual Studio 项目目录 Visual Studio 客户端应用程序项目的项目文件<> (续表) 文 件 类 型 位 置 说 明 .disco、.vsdisco App_WebReferences 子目录 XML Web Services发现文件,用于帮助定位可用的 Web services .dsdgm、.dsprototype 应用程序根目录或子目录 分布式服务关系图 (DSD) 文件,该文件可以添加到任何提供或使用Web Services的Visual Studio解决方案,以便对Web Service交互的结构视图进行反向工程处理 .dll Bin 子目录 已编译的类库文件。或者,可以将类的源代码放在 App_Code 子目录下 .licx、.webinfo 应用程序根目录或子目录 许可证文件。控件创作者可以通过授权方法来检查用户是否得到使用控件的授权,从而保护自己的知识产权 .master 应用程序根目录或子目录 母版页,它定义应用程序中引用母版页的其他网页的布局 .mdb、.ldb App_Data 子目录 Access 数据库文件 .mdf App_Data 子目录 SQL 数据库文件 .msgx、.svc 应用程序根目录或子目录 Indigo Messaging Framework (MFx) service 文件 .rem 应用程序根目录或子目录 远程处理程序文件 .resources App_GlobalResources 或 App_LocalResources 子目录 资源文件,该文件包含指向图像、可本地化文本或其他数据的资源字符串 .resx App_GlobalResources或 App_LocalResources子目录 资源文件,该文件包含指向图像、可本地化文本或其他数据的资源字符串 .sdm、.sdmDocument 应用程序根目录或子目录 系统定义模型 (SDM) 文件 .sitemap 应用程序根目录 站点地图文件,该文件包含网站的结构。ASP.NET中附带了一个默认的站点地图提供程序,使用站点地图文件可以很方便地在网页上显示导航控件 .skin App_Themes 子目录 用于确定显示格式的外观文件 .sln Visual Web Developer 项目目录 Visual Web Developer项目的解决方案文件 .soap 应用程序根目录或子目录 SOAP 扩展文件 由ASP.NET管理的文件类型通常映射到IIS中的asp.dll,由IIS管理的文件类型如表1-3所示。 表 1-3 IIS管理的文件类型表 文 件 类 型 位 置 说 明 .asa 应用程序根目录 通常是 Global.asa 文件,该文件包含在 ASP 会话或应用程序生存期开始或者结束时运行的可选方法 .asp 应用程序根目录或子目录 ASP 网页,该网页包含使用 ASP 内置对象的 @ 指令和脚本代码 .cdx App_Data 子目录 Visual FoxPro 的复合索引结构文件 .cer 应用程序根目录或子目录 用于验证网站的证书文件 .idc 应用程序根目录或子目录 映射到 httpodbc.dll 的 Internet Database Connector 文件。IDC 现在已经被否决,因为它没有为数据连接提供足够的安全性。IIS 6.0 将是包含 IDC 的最后一个版本 .shtm、.shtml、 .stm 应用程序根目录或子目录 映射到 ssinc.dll IIS 只使用具有在MIME类型列表中注册的文件扩展名的静态文件。此列表存储在应用程序的MimeMap IIS元数据库属性中。如果某个文件类型已映射到应用程序扩展,则不需要将该类型包括在MIME类型列表中,除非要将该文件作为静态文件来处理。通常不应当将ASP.NET源代码文件类型包括在MIME类型列表中,因为那样做可能会允许浏览器查看源代码。已注册的静态文件类型如表1-4所示。 表 1-4 静态文件类型表 文 件 类 型 位 置 说 明 .css 应用程序根目录或子目录,或 App_Themes 子目录。 用于确定 HTML 元素格式的样式表文件 .htm、.html 应用程序根目录或子目录。 用 HTML 代码编写的静态 Web 文件 1.3.3 ASP.NET 网站路径 使用网站中的资源时,通常都必须指定资源的路径。例如,可以使用URL路径引用页面中的图像文件或网站中其他位置处页面的URL。同样,Web应用程序中的代码可以使用基于服务器的文件的物理文件路径对文件进行读写操作。ASP.NET提供用于引用资源并确定应用程序中的页面或其他资源路径的方法。 1. 指定资源的路径 许多情况下,页面中的元素或控件必须引用外部资源,ASP.NET允许通过各种方法引用外部资源。所选方法取决于使用客户端元素还是服务器控件。 客户端元素以原样传递给浏览器。因此,从客户端元素中引用资源时,应根据 HTML中URL的标准规则构造路径。可以使用完全限定(绝对)URL路径或各种类型的相对路径。例如,如果页面包含一个img标记,则可以使用以下路径之一设置其src属性。 ● 绝对URL路径,如果引用其他位置(如外部网站)中的资源,则绝对URL路径非常有用,指定绝对路径的代码示例如下: ● 站点根目录相对路径,根据站点(不是应用程序)根目录进行解析。如果将跨应用程序的资源(如图像或客户端脚本文件)保留在网站根目录下的文件夹中,则站点根目录相对路径非常有用。此示例路径假定Images文件夹存在于网站根目录下: 如果网站为 http://www.myname.com,则路径将解析为: http://www.myname.com/Images/Image.jpg 根据当前页面路径解析的相对路径: 解析与当前页面路径对等的相对路径: 默认情况下,浏览器使用当前页面的URL作为基准解析相对路径。但是,可以在页面中包含 HTML base 元素,以指定替代基路径。 在引用资源的ASP.NET服务器控件中,可以使用绝对路径或相对路径,这一点与客户端元素一样。如果使用相对路径,则相对于页面、用户控件或包含该控件主题的路径进行解析。例如,假设Controls文件夹中包含一个用户控件,而该用户控件包含一个 Web服务器控件,该服务器控件的属性设置为以下路径: Images/Image.jpg 该用户控件运行时,路径将解析为以下形式: /Controls/Images/Image.jpg 无论承载用户控件的页面位置如何,都是如此。 服务器控件中的绝对和相对路径引用具有以下缺点。 ● 绝对路径在应用程序之间是不可移植的。如果移动绝对路径指向的应用程序,则链接将会中断。 ● 如果将资源或页面移动到不同的文件夹,可能很难维护采用客户端元素样式的相对路径。 为克服这些缺点,ASP.NET启用了Web应用程序根目录运算符 “~”,在服务器控件中指定路径时,可以使用该运算符。ASP.NET会将“~”运算符解析为当前应用程序的根目录。可以结合使用“~” 运算符和文件夹来指定基于当前根目录的路径。下面演示使用Image服务器控件时用于指定图像的根目录相对路径的“~”运算符: 在该示例中,图像文件将从Web应用程序根目录下的Images文件夹中直接读取,无论该页面位于网站的什么位置。“~”运算符只能为服务器控件识别,并且位于服务器代码中。可以在服务器控件中任何与路径有关的属性中使用“~”运算符。 2. 确定当前网站的物理文件路径 在应用程序中,可能需要确定服务器上的文件或其他资源的路径。例如,如果应用程序以编程方式对文本文件进行读写操作,则必须为用于读取和写入的方法提供该文件的完整物理路径。 将文件物理路径(如C:\Website\MyApplication)硬编码到应用程序中并不是很好,因为如果移动或部署应用程序,则路径会发生更改。但是,ASP.NET提供了以编程方式获取应用程序中的任何物理文件路径的方法。然后,可以使用基文件路径创建所需资源的完整路径。用于确定文件路径的两种最常用的ASP.NET功能是返回路径信息的对象属性,以及方法。 下面的示例假定使用以下URL来发出浏览器请求: http://www.myname.com/MyFirst/Default.aspx 对于本示例,术语“虚拟路径”是指跟在服务器标识符后面的请求URL的一部分,此时虚拟路径如下: MyFirst/Default.aspx 此外,本示例假定网站根目录的物理路径如下: D:\study\BOOK\Ch01\SolutionCh01\MyFirstWeb\ HttpRequest对象的属性可以帮助确定应用程序中的资源路径,如表1-5所示。 表 1-5 HttpRequest对象的属性表 属 性 名 称 说 明 获取当前应用程序的根目录路径,无论在该应用程序中的什么位置请求该路径。对于此示例,该属性都将返回/ MyFirst 获取当前请求的虚拟路径。不同于在于如果请求已在服务器代码中被重定向,则CurrentExecutionFilePath 就是正确的。对于此示例,该属性将返回/MyFirstWeb/Default.aspx,如果作为对进行调用的结果,获取正在运行的代码中的属性,则路径将反映该代码的位置 (续表) )() 属 性 名 称 说 明 FilePath 获取当前请求的虚拟路径。对于此示例,该属性将返回/MyFirst/Default.aspx 不同于CurrentExecutionFilePath,FilePath不反映服务器端转换 获取当前请求的虚拟路径。对于此示例,该属性将返回/MyFirst/Default.aspx 获取当前正在执行的应用程序的根目录的物理文件系统路径。对于此示例,该属性将返回D:\study\BOOK\Ch01\SolutionCh01\MyFirstWeb\ 获取与请求的URL对应的物理文件系统路径。对于此示例,该属性将返回D:\study\BOOK\Ch01\SolutionCh01\MyFirstWeb\default.aspx MapPath方法返回传递给该方法的虚拟路径的完整物理路径。例如,以下代码返回网站根目录的文件路径: string rootPath = Server.MapPath("~"); 对于本示例,返回D:\study\BOOK\Ch01\SolutionCh01\MyFirstWeb\,传递给方法的路径必须为应用程序相对路径,而不是绝对路径。 1.3.4 ASP.NET 网站中共享代码文件夹 如果Web应用程序包括要在多个页之间共享的代码,可以将代码保存在Web应用程序根目录下的两个特殊文件夹(Bin 文件夹和App_Code文件夹)中的某个文件夹中。 1. Bin文件夹 在Bin文件夹中可以存储编译的程序集,Web应用程序任意处的其他代码(如页代码)都会自动引用该文件夹。例如,一个自定义类的代码,可以将编译后的程序集复制到Web应用程序的Bin文件夹中,这样所有页都可以使用这个类了。 Bin文件夹中的程序集无须注册。只要.dll文件存在于Bin文件夹中,ASP.NET就可以识别它。如果更改了.dll文件,并将它的新版本写入到了Bin文件夹中,则ASP.NET会检测到更新,并对随后的新页请求使用新版本的.dll文件。 将编译后的程序集放入Bin文件夹中会带来安全风险。如果是自己编写和编译的代码,那么需要了解代码的功能。但是,必须像对待任何可执行代码一样来对待Bin文件夹中已编译的代码。在完成代码测试并确信已了解代码功能之前,要对已编译的代码保持谨慎的态度。 请注意以下安全方面的知识,这些知识与是否将已编译的代码放入Bin文件夹有关: ● Bin文件夹中程序集的作用范围为当前应用程序。因此,它们无法访问当前Web应用程序之外的资源或调用当前Web应用程序之外的代码。 ● 运行时,程序集的访问级别由本地计算机上指定的信任级别确定。 ● 如果使用了诸如Visual Studio这样的设计器,那么Bin文件夹中的代码运行所在的上下文与运行时不同。例如,代码可能以完全信任状态运行。 2. App_Code文件夹 可以在App_Code文件夹中存储源代码,在运行时会自动对这些代码进行编译。Web应用程序中的其他代码都可以访问产生的程序集。因此,App_Code文件夹的工作方式与Bin文件夹很类似,不同之处是可以在其中存储源代码而非已编译的代码。App_Code文件夹及其在ASP.NET Web应用程序中的特殊地位使得可以创建自定义类以及其他源代码文件,并在Web应用程序中使用它们而不必单独对它们进行编译。 App_Code文件夹可以包含以传统类文件(即带有 .vb、.cs 等扩展名的文件)的形式编写的源代码文件。但是,也可以包含并非明确显示出由某一特定编程语言编写的文件。例如.wsdl(Web 服务发现语言)文件和XML架构 (.xsd) 文件。ASP.NET 可以将这些文件编译成程序集。 根据需要,App_Code文件夹可以包含任意数量的文件和子文件夹。可以采用任何方式组织源代码,ASP.NET仍会将所有代码编译成单个程序集,并且Web应用程序任意处的其他代码都可以访问该程序集。 App_Code文件夹并未显式标记为包含以任何一种编程语言编写的文件。相反,ASP.NET是根据App_Code文件夹所包含的文件来推断应为App_Code文件夹调用哪一种编译器。如果App_Code文件夹包含.vb文件,则ASP.NET使用Visual Basic编译器;如果包含.cs文件,则ASP.NET使用C# 编译器,以此类推。如果App_Code文件夹只包含并未明确表明编程语言的文件(如 .wsdl 文件),则ASP.NET将使用Web应用程序的默认编译器,默认编译器在Web应用程序或计算机配置文件的<元素(ASP.NET设置架构>元素)中确定。 因为App_Code文件夹中的源代码要编译成单个程序集,所以App_Code文件夹中的所有文件必须使用相同的编程语言编写。例如,App_Code文件夹不能同时包含采用Visual Basic和C#编写的源代码。 但是,可以对Web应用程序进行配置,使其将App_Code文件夹的子文件夹作为独立的可编译单元来处理。这样,每一个文件夹就可以包含以不同编程语言编写的源代码。通过在Web.config文件的Compilation元素中创建一个元素),然后添加一个对子文件夹的引用,即可指定该配置。下面的示例阐释如何对名为VBCode 和CSCode 的子文件夹进行配置,使其编译成不同的程序集: 上面的代码中,对VBCode和CSCode子文件夹的引用并未包括任何有关子文件夹中所包含的编程语言的信息。就像对待App_Code文件夹本身一样,ASP.NET会根据子文件夹中的文件来推断要使用的编译器。 App_Code文件夹中的代码存在的安全问题基本上与Bin文件夹中的代码存在的安全问题相同。代码都会在运行时编译成程序集。比Bin文件夹要好一些的是,可以阅读App_Code文件夹中文件的源代码。但是,如果不能完全理解代码,仍然会存在安全风险。因此,对待App_Code文件夹中的源代码的态度必须像对待基于同样的源代码生成的已编译代码一样谨慎。 1.4 创建ASP.NET应用程序 下面通过一个实例来说明在Visual Studio 2005中如何创建ASP.NET Web应用程序。 (1) 从系统的“开始”菜单中,启动Microsoft Visual Studio 2005,在Visual Studio 2005中选择“文件”|“新建(N)”|“新建项目(P)...”命令,弹出“新建项目”对话框,在左边的“项目类型”中选择“其他项目类型”的“Visual Studio 解决方案”,在右边的Visual Studio已安装的模板中选择“空白解决方案”,在名称编辑框中输入“SolutionCh01”,通过单击“浏览(B)...”按钮选择其保存位置,如图1-1所示。 图1-1 新建解决方案对话框 (2) 单击“确定”按钮,生成空白解决方案SolutionCh01,在解决方案资源管理器中,右键单击“SolutionCh01”,选择“添加”|“新建网站(W)...”命令,弹出“添加新网站”对话框,在Visual Studio已安装的模板中选择“ASP.NET 网站”,在“语言”下拉列表中选择“Visual C#”选项,在“位置”下拉列表中,选择“文件系统”选项,并通过单击“浏览(B)...”按钮选择其保存的位置,并修改其名称为“MyFirstWeb”,如图1-2所示。 图1-2 添加新网站对话框 (3)单击“确定”按钮,如图1-3所示,在解决方案管理器中可以看到自动生成的Default.aspx和Default.aspx.cs两个文件,它们共同定义了一个Web窗体,另外还自动生成了一个App_Data文件夹。单击左边“错误列表”上方的“设计”选项,切换到设计界面,如图1-4所示。 图1-3 Web窗体的源程序界面 图1-4 Web窗体的设计界面 (4) 将鼠标移动到左边的“工具箱”,将看到各种控件,如图1-5所示。 图1-5 工具箱界面 (5) 从“工具箱”中拖动一个Label控件到Web窗体上,再拖动一个Button控件到Web窗体上,右键单击Label控件选择“属性”选项,修改其默认的(ID)属性为Label_Result,修改其Text属性为“显示结果”,如图1-6所示,以同样的方法修改Button控件的ID属性为Button_Confirm,修改其Text属性为“确认”。 图1-6 Label控件的属性页 (6) 选择Button控件,在其属性页中,选择“事件”选项,如图1-7所示,双击“Click”右边的编辑区域,将生成Button按钮的Click事件,并切换到Default.aspx.cs中。 图1-7 Button控件的属性页 (7) 在Button_Confirm_Click事件中添加代码给Label_Result的Text属性赋值,在其Default.aspx.cs中添加的代码如下: protected void Button_Confirm_Click(object sender, EventArgs e) { //给Label_Result的Text属性赋值 Label_Result.Text = "您单击了确认按钮"; } (8) 切换到Default.aspx的源文件中,可以看到如下代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 无标题页
其中第一行的@Page指令,定义了ASP.NET页分析器和编译器使用的页特定属性(.aspx 文件),其语法如下: <%@ Page attribute="value" [attribute="value"...] %> 若要定义@Page 指令的多个属性,则使用一个空格分隔每个属性值。对于特定属性,不要将该属性与其值相连的等号两侧加空格。其部分属性的说明如表1-6所示。 表 1-6 Page指令的属性值表 属性值名称 说 明 AutoEventWireup 指示页的事件是否自动绑定。如果启用了事件自动绑定,则为 true;否则为 false。默认值为 true Buffer 确定是否启用了HTTP响应缓冲。如果启用了页缓冲,则为 true;否则为 false。 默认值为true ClassName 一个字符串,指定在请求页时将自动进行动态编译的页的类名。此值可以是任何有效的类名,并且可以包括类的完整命名空间。如果未指定该属性的值,则已编译页的类名将基于页的文件名 ClientTarget 指示 ASP.NET 服务器控件应该为其呈现内容的目标用户代理(通常是 Web 浏览器,例如 Microsoft Internet Explorer)。该值可以是应用程序配置文件的 节中定义的任何有效别名 CodeBehind 指定包含与页关联类的已编译文件的名称。该属性不能在运行时使用。提供此属性是为了与以前版本的ASP.NET兼容,以实现代码隐藏功能。在 ASP.NET 2.0版中,应改用CodeFile属性指定该源文件的名称,同时使用 Inherits 属性指定该类的完全限定名称 CodeFile 指定指向页引用的代码隐藏文件的路径。此属性与 Inherits 属性一起使用可以将代码隐藏源文件与网页相关联。此属性仅对编译的页有效 Inherits 定义供页继承的代码隐藏类。它可以是从类派生的任何类。与 CodeFile 属性(包含指向代码隐藏类的源文件的路径)一起使用 Language 指定在对页中的所有内联呈现(<% %> 和 <%= %>)和代码声明块进行编译时使用的语言。值可以表示任何.NET Framework支持的语言,包括Visual Basic.NET、C# 或 JScript。每页只能使用和指定一种语言 MasterPageFile 设置内容页的母版页或嵌套母版页的路径。支持相对路径和绝对路径 Trace 指示是否启用跟踪。如果启用了,则为true;否则为 false。默认值为 false TraceMode 指示当启用跟踪时如何为页显示跟踪消息。可能的值为 SortByTime和SortByCategory。当启用跟踪时,默认值为 SortByTime 该指令只能在Web窗体页中使用。每个.aspx文件只能包含一条@ Page指令。此外,每条@ Page指令只能定义一个Language属性,因为每页只能使用一种语言。由于在源代码或配置文件中,大多数属性都提供了最常用的默认值,因此通常不需要向指令添加大量属性。通常,应该添加希望页具有的功能所需的最小属性集。如果有一个想应用于所有页的公共属性(例如,希望在所有页上启用跟踪),请考虑在 Web.config文件中启用相应的功能,而不是向每个单独的页添加Trace属性。 (9) 选择“调试”菜单中的“启动调试”命令或按F5,第一次运行时将有提示对话框出现,如图1-8所示。 (10) 选择“添加新的启用了调试的Web.config文件。”单选按钮, 单击“确定”按钮,如图1-9所示。 图1-8 未启用调试对话框 图1-9 程序运行的初始状态 (11) 单击“确认”按钮,操作后状态如图1-10所示。 图1-10 操作后的状态 (12) 关闭网页后,在“解决方案资源管理器”中,可以看到增加了web.Config文件。Web.Config文件是一个XML 文本文件,存储ASP.NET 的配置数据,每一个配置文件都命名为 Web.Config。Web.Config 文件可以出现在 ASP.NET 应用程序的多个目录中。打开Web.Config文件,禁用调试模式,代码如下: (13) 在解决方案资源管理器中,右键单击“D:\study\BOOK\Ch01\SolutionCh01\ MyFirstWeb”,选择“生成网站(U)”命令,再选择“发布网站(H)”命令,可以通过“...”按钮选择发布的位置,如采用默认的目标位置,如图1-11所示,单击“确定”按钮,将在指定目标位置生成Default.aspx、Web.Config文件和bin目录,bin目录下生成App_Web_lfjrzbep.dll,其中“lfjrzbep”是随机生成的。在“Internet信息服务”的“网站”中创建虚拟路径“MyFirstWeb”,并选择上面发布的Web网站路径为本地路径,就可以在IE中通过输入“http://localhost/ MyFirstWeb/Default.aspx”进行访问了。 也可以在发布网站时,直接在图1-11的目标位置中输入http://localhost/test,将自动创建test虚拟路径,然后在IE中输入http://localhost/test/或http://localhost/test/Default.aspx就可以访问了,如图1-12所示。 图1-11 发布网站界面 图1-12 在IE中访问发布的网站 1.5 本章小结 本章介绍了.NET Framework、Visual Studio集成开发环境、ASP.NET Web应用程序以及如何使用Visual Studio 2005集成开发环境创建基于C#语言的ASP.NET Web应用程序。.NET Framework包括基本介绍、公共语言运行库及.NET Framework类库。Visual Studio集成开发环境主要包括解决方案、项目以及项,生成和调试以及测试,对ASP.NET 2.0的支持。ASP.NET Web应用程序包括ASP.NET网站的布局、网站文件的类型、网站路径以及网站中共享代码文件夹。最后通过一个实例介绍如何使用Visual Studio 2005集成开发环境创建基于C#语言的ASP.NET Web应用程序以及发布ASP.NET Web应用程序。 24 25