ASP.NET 应用程序文件夹入门指南






4.69/5 (114投票s)
本文将介绍 ASP.NET 应用程序文件夹,如 App_Code、App_Theme 和 App_Data
目录
引言
首先,我要感谢 Sean Ewington 的文章 《初学者入门 - Web 开发》,它给了我一个绝佳的机会在 CodeProject 上为初学者撰写关于 ASP.NET Web 开发的文章。在为初学者撰写了关于 缓存 和 视图状态 的文章后,我决定为初学者撰写一篇关于 ASP.NET 应用程序文件夹的文章。不过,我稍后还会写另一篇文章来介绍剩余的状态管理。和我的其他文章一样,我相信这篇文章也能让你对应用程序文件夹有一个很好的了解。请提出宝贵的建议和改进意见,以便我能在本文和今后的文章中采纳。
概述 - ASP.NET 应用程序文件夹
ASP.NET 2.0 采用基于文件的处理方式。这意味着所有类文件、资源文件、数据文件和文件夹都以分层结构进行维护。如果我们使用 ASP.NET 2.0,可以通过 **添加项** 选项来添加文件和文件夹。如果我们查看一个示例应用程序的结构,它会看起来像下图所示。
我们可以根据需要(根据我们的要求)在解决方案中添加任意数量的文件和文件夹,而无需每次添加时都重新编译它们。ASP.NET 会在需要时动态编译它们。因此,ASP.NET 2.0 所做的就是,它使用预定义的文件夹结构来包含文件(类、图像、资源等),然后动态编译它们,我们可以在整个应用程序中访问这些文件。ASP.NET 还提供了特殊文件夹来维护文件和资源。让我们来看看使用这些文件夹的优势。
ASP.NET 应用程序文件夹的优势
使用 ASP.NET 应用程序文件夹的主要优势如下:
- 我们可以以一种有组织的方式维护资源(类、图像、代码、数据库、主题),从而使我们能够轻松地开发和维护站点。
- 所有文件和文件夹都可以通过应用程序访问。
- 我们可以添加任意数量的文件。
- 文件在需要时动态编译。
不同类型的应用程序文件夹
ASP.NET 会特殊处理以下文件夹。它们是:
- App_Code
- Bin
- App_Data
- App_Theme
- App_Browser
- App_WebReference
- App_LocalResource
- App_GlobalResource
应用程序文件夹详情
现在,为了了解这些文件夹的用法,我将从 *App_Code* 开始。
App_Code 文件夹
顾名思义,*App_Code* 文件夹用于存储类、类型化数据集等。存储在 *App_Code* 中的所有项都可以自动在整个应用程序中访问。如果我们存储任何类文件(如 *.cs* 或 *.vb*),它会自动编译它们。它会自动从 *.xsd*(XML 架构)文件创建类型化数据集,并从 WSDL 创建 XML Web 服务代理类。让我们来看看如何使用 *App_Code* 文件夹。
我们可以通过 **解决方案文件** → 右键单击 → **添加 ASP.NET 文件夹** → ***App_Code*** 来添加一个 *App_Code* 文件夹。*App_Code* 文件夹现在已添加到您的应用程序中。
**注意:** 尝试使用相同的步骤再添加一个 *App_Code* 文件夹。哎呀…… *App_Code* 文件夹在那里不再可用了。因此,ASP.NET 只允许您添加一个 *App_Code* 文件夹。
现在,我们可以将新项(如类、文本和 XML 文件)添加到 *App_Code* 文件夹中,也可以将现有文件添加到其中。
让我们来看一个示例,演示它是如何工作的。在 *App_Code* 文件夹中,我添加了一个类 *MyCSharpClass.cs*。
在该类中,我编写了一小段代码来对两个数字进行相加。
现在,尝试在应用程序的任何地方访问此类的实例。您将看到 `MyCSharpClass` 在整个应用程序中都可访问。
如果我们想存储不同的类,如 *.cs* 或 *.vb*,会发生什么?如果我们把 C# 和 VB 类放在同一个文件夹中,它将产生以下编译错误:
这是因为 *App_Code* 文件夹中包含的所有类都构建成一个单独的程序集,它不能在根级别包含不同的语言,甚至也不能在子文件夹中按以下方式包含:
我们有一个解决方案来克服这个问题。我们需要为 C# 和 VB 或其他类创建单独的文件夹。
将类文件单独存储在这些文件夹中,并在 *web.config* 文件中配置文件夹层次结构。
现在,我将进入下一部分 - *Bin* 文件夹。
Bin 文件夹
*Bin* 文件夹用于存放程序集。我们可以将它们作为引用从 Web 应用程序的任何位置访问。如果我们要在 Web 应用程序中使用任何类库,*Bin* 文件夹就派上用场了。假设我们正在创建一个名为 `TestLib` 的类库。构建该库后,我们将得到 *TestLib.dll*。现在,右键单击解决方案文件 → **添加引用** → **项目**,选择 `TestLib` 项目,然后单击“确定”。检查 *Bin* 文件夹,它将包含 *TestLib.dll* 和 *TestLib.pdb* 文件。
*Bin* 文件夹中的程序集不需要在系统上注册,ASP.NET 会识别 Bin 文件夹内 DLL 的存在。将 *.pdb* 文件保留在 Bin 文件夹内有助于我们进行调试。将程序集存储在 Bin 文件夹中的主要限制是它们的范围仅限于当前应用程序。因此,它们无法访问当前 Web 应用程序之外的任何代码。 [来源]
接下来,让我们看看 *App_Data* 文件夹。
App_Data 文件夹
*App_Data* 文件夹用于作为 Web 应用程序的数据存储。它可以存储 *.mdf*、*.mdb* 和 XML 等文件。它集中管理您应用程序的所有数据。它可以在 Web 应用程序的任何位置访问。*App_Data* 文件夹的真正优势在于,您放置在那里的任何文件都无法下载。
我们可以通过选择“添加新项”直接将 *.mdf* 文件添加到 *App_Data* 文件夹。然后,我们无需打开 SQL Server 即可创建表、存储过程或函数。现在,如果我们想将这些数据添加到我们的应用程序中,我们可以轻松地使用它们。
现在,看看我们需要编写的用于访问 *App_Data* 文件夹中的数据库的连接字符串。
我们可以使用此连接字符串连接到 *MyDB.mdf* 数据库。查看下面的示例,我用它来读取 *MyDB.Mdf* 文件中的 **data** 表。` `
App_Theme 文件夹
如果您希望您的网站具有一致的外观,则需要为您的 Web 应用程序设计主题。*App_Themes* 文件夹包含所有这些主题。*App_Theme* 文件夹可以包含两个子文件夹:一个用于 CSS 文件,另一个用于皮肤文件。当我们添加一个 *App_Theme* 文件夹时,会自动创建一个名为 *Theme1* 的子文件夹。我们可以根据需要更改主题文件夹的名称。
我在这篇文章中不介绍如何创建皮肤文件或 CSS 文件,我主要关注的是如何应用它们。您可以 通过 Google 轻松找到皮肤和 CSS 的详细信息。
现在,我们要将主题应用于页面,有几种方法可以做到。我们可以使用页面指令以以下方式从 *aspx* 页面设置主题:
当我们从 *aspx* 页面设置主题时,可供我们选择的主题列表如下图所示。我们也可以从代码隐藏文件中设置主题,甚至可以在运行时更改主题(使用 `HttpHandler`)。
App_Browser 文件夹
*App_Browser* 文件夹包含浏览器信息文件(*.browser* 文件)。这些文件是基于 XML 的文件,用于识别浏览器及其功能。您会在以下位置找到浏览器文件:
如果您想更改 *.browser* 文件,只需将其复制到 *App_Browser* 文件夹并进行修改。您可以通过单击 *App_Browser* 文件夹的 **添加新项** 来创建新的浏览器文件。
正如我之前提到的,浏览器文件是配置文件,通常如下所示:
App_WebReference 文件夹
顾名思义,*App_WebReference* 文件夹包含对任何 Web 服务的引用。如果我们将任何 Web 服务添加到我们的 Web 应用程序中,它们会自动放入 *App_WebReference* 文件夹,就像在 Windows 应用程序中添加 DLL 会进入 *Reference* 文件夹一样。
资源文件夹
在开始介绍 *App_GlobalResource* 和 *App_LocalResource* 文件夹之前,我想先对 ASP.NET 资源做一个简要的介绍。如果您要为跨国公司或可以从世界各地访问的公共网站创建站点,您需要考虑如何以最佳方式与不同文化和不同国家/地区的用户以不同的语言进行交流。ASP.NET 提供了基础结构,可以通过使用资源文件来创建 Web 应用程序,这些应用程序可以根据用户的偏好自动调整格式和语言。资源文件的主要目的是 Web 应用程序的 **本地化**。
ASP.NET 使用资源文件来简化对多种语言的支持。Visual Studio 2005 可以自动生成 XML 资源文件,其中包含不同语言下控件的文本。当用户访问站点时,他们可以根据自己的偏好更改站点的语言。资源有两种类型:
- 本地资源
- 全局资源
*App_LocalResource* 文件夹包含本地资源文件,*App_GlobalResource* 文件夹包含全局资源文件。
App_LocalResource 文件夹
本地资源特定于单个网页,应用于提供网页的多语言功能。
本地资源必须存储在包含网页的文件夹的 *App_LocalResource* 子文件夹中。由于您的 Web 应用程序中的每个页面可能都有本地资源,因此您可能在每个文件夹中都有 *App_LocalResource* 子文件夹。
资源文件名应为 *<pageName>[.langauge].resx*。本地资源文件的示例如 *Mypage.aspx.ex.resx* 和 *Mypage.aspx.de.resx*。*Default.aspx.resx* 是在没有其他资源文件与用户当前区域性匹配时使用的基础资源文件。
如果您想为页面创建本地资源,请打开页面的设计视图,然后从 **工具菜单** 中选择 **生成本地资源**。然后您会看到一个资源文件已自动创建在相应的 *App_LocalResource* 文件夹中。
***注意:*** *Default2.aspx.resx* 是 *Default2.aspx* 的资源文件,*Others.aspx.resx* 是 *Others.aspx* 的资源文件。这两个资源文件都位于 *App_LocalResource* 文件夹内。
以下代码展示了资源文件的 XML 代码。要更改资源文件,我们可以直接更改 XML 或使用资源编辑器。
如果我们更改页面上的任何内容,资源文件将自动更新。如果您想测试本地资源的应用程序,只需复制 *Default2.aspx.resx* 并将其重命名为 *default2.aspx.fr.resx*(法语资源)。现在,作为测试,我已经将按钮的工具提示更改为法语资源中的“French ToolTip”。现在,请更改您的 Web 浏览器设置,并将 *法语* 设置为默认区域性。
(对于 Internet Explorer,请使用 **工具 → Internet 选项 → 语言**,将 *法语* 添加到列表顶部,然后测试应用程序)
以这种方式测试按钮工具提示,您也可以为其他语言进行测试。
App_GlobalResource 文件夹
*App_GlobalResource* 文件夹可以被 Web 站点中的任何页面或代码读取。全局资源必须存储在应用程序根目录的 *App_GlobalResource* 文件夹中。当我们需要为多个网页使用单个资源时,应使用 *App_GlobalResource* 文件夹。我们可以通过将 ASP.NET 控件属性手动与全局资源文件中的资源关联来定义它们。可以通过右键单击 *App_GlobalResource* 文件夹并单击 **添加项** 来添加全局资源文件。将 *.resx* 文件添加为资源。
我们可以通过使用 `Resource.Resource` 对象以编程方式访问这些资源。
例如:
Label1.Text = Resource.Resource.MyText
我们可以使用 `GetLocalResourceObject()` 和 `GetGlobalResourceObject()` 方法来访问全局资源,然后将它们转换为正确的类型。
Label1.Text = GetLocalResourceObject("Label1.Text").ToString();
摘要
在这篇文章中,我解释了 ASP.NET 中所有应用程序文件夹的用法。我希望我已经足够清楚地描述了它们,以便您能够理解。还有很多东西需要学习,比如如何设计主题和皮肤,以及如何使用资源文件。我在最后提供了一些参考链接,可以帮助您进一步学习。
请阅读这些链接,至少要阅读关于资源的部分,因为它是 ASP.NET 2.0 的一个非常重要的组成部分。将来我计划为初学者撰写一篇关于 ASP.NET 资源的Bài viết。但不是现在。
感谢您的阅读,请不要忘记留下您的建议!
参考文献
历史
- 撰写于 2008 年 12 月 7 日