在页之间共享代码
尽管可以将代码放在站点的每个页上(使用上一节中所述的内联或代码隐藏分离模型),但有时您将希望在站点中的多个页之间共享代码。将这些代码复制到需要它们的每个页上,这种做法既低效又使代码难以维护。幸运的是,ASP.NET 提供了几种简单的方法,使应用程序中的所有页都可以访问代码。
代码目录 2.0 中的新增功能
与页可在运行时动态编译一样,任意代码文件(例如,.cs 或 .vb 文件)也可以在运行时动态编译。ASP.NET 2.0 引入了 App_Code 目录,该目录可以包含一些独立文件,这些文件包含要在应用程序中的多个页之间共享的代码。
与 ASP.NET 1.x 不同(1.x 需要将这些文件预编译到 Bin 目录),App_Code 目录中的所有代码文件都将在运行时动态编译,然后提供给应用程序。可以在 App_Code 目录下放置多种语言的文件,前提是将这些文件划分到各子目录中(在 Web.config 中用特定语言注册这些子目录)。下面的示例演示如何使用 App_Code 目录包含一个从页调用的类文件。
C# App_Code Folder Example
默认情况下,App_Code 目录只能包含同一种语言的文件。但可以将 App_Code 目录划分为若干子目录(每个子目录包含同一语言的文件)以便可以在 App_Code 目录下包含多种语言。为此,需要在应用程序的 Web.config 文件中注册每个子目录。
<configuration> <system.web> <compilation> <codeSubDirectories> <add directoryName="Subdirectory"/> </codeSubDirectories> </compilation> </system.web></configuration>
下面的示例演示了一个经过划分以包含 VB 和 C# 语言文件的 App_Code 目录。
C# Partitioned App_Code Folder Example
Bin 目录
在 ASP.NET 版本 1 中支持 Bin 目录,该目录类似于 Code 目录,不同的是它可以包含预编译的程序集。如果需要使用可能由其他人编写的代码,则此目录十分有用,您无需访问源代码(VB 或 C# 文件)就可以得到编译后的 DLL。只需将程序集放在 Bin 目录中,就可以在您的站点中使用它。默认情况下,Bin 目录中的所有程序集都自动加载到应用程序中,然后可供各页访问。您可能需要使用页最上方的
@Import 指令从 Bin 目录的程序集中导入特定的命名空间。
<@ Import Namespace="MyCustomNamespace" >
全局程序集缓存
.NET Framework 2.0 提供了表示 Framework 的各个部件的大量程序集。这些程序集存储在全局程序集缓存中,该缓存是程序集的版本化存储库,可供计算机上的所有应用程序使用(而不像 Bin 和 App_Code 那样仅限于特定的应用程序)。Framework 中的多个程序集都可自动提供给 ASP.NET 应用程序。通过在应用程序的 Web.config 文件中注册,可以注册更多的程序集。
<configuration> <compilation> <assemblies> <add assembly="System.Data, Version=1.0.2411.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </assemblies> </compilation></configuration>
请注意,您仍需使用
@Import 指令使这些程序集中的命名空间可供各页使用。