Bin文件夹包含应用程序所需的,用于控件、组件或者需要引用的任何其他代码的可部署程序集。该目录中存在的任何.dll文件将自动地链接到应用程序。如果在该文件夹中留有不用的或过期的文件,则可能出现“二义性引用(ambiguous reference)”异常的风险。换句话说,如果两个不同的程序集定义相同的类(相同的命名空间和名称),则ASP.NET运行库不能决定应该使用哪一个程序集,从而抛出一个异常。在开发时,当我们重新命名一个项目或一个程序集的名称时,这是常见的错误。为了避免这种错误,一定不要在该文件夹中保留任何不必要的程序集,或者至少要从配置文件的<assemblies>节中删除如下代码行:
<add assembly="*" />
2. App_Browser文件夹
该可选的文件夹包含.browser文件。.browser文件描述浏览器(不管是移动设备浏览器,还是台式机浏览器)的特 征和功能。ASP.NET在安装路径下的Config/Browser文件夹中安装了大量.browser文件,这些文件供所有应用程序共享。我们只是把 当前应用程序特有的浏览器文件放在App_Browser文件夹下。.browser文件的内容即时动态地进行编译,以便向ASP.NET运行库提供最新 的浏览器信息。
让我们简单谈谈拥有一个自定义的.browser文件可能有帮助的场景。设想应用程序使用了一个在某个浏览器下不能有效呈现的控件。在指定的浏览器中显示宿主页面时,可以编写一个.browser文件,迫使ASP.NET使用一个不同的适配器来生成该控件。
<browsers>
<browser id="browserID">
<controlAdapters>
<adapter controlType="Samples.CustomControl"
adapterType="Samples.Adapters.CustomControlAdapter" />
</controlAdapters>
</browser>
</browsers>
假设browserID与ASP.NET识别的标准浏览器之一相匹配,则上文所示的.browser文件指示在指定的浏览器下使用CustomControlAdapter呈现CustomControl。
3. App_Code文件夹
App_Code文件夹正好在Web应用程序根目录下,其存储所有应当作为应用程序的一部分动态编译的类文件。这些类文件自 动链接到应用程序,而不需要在页面中添加任何显式指令或声明来创建依赖性。App_Code文件夹中放置的类文件可以包含任何可识别的ASP.NET组件 ——自定义控件、辅助类、build提供程序、业务类、自定义提供程序、HTTP处理程序等。
注意 在开发时,对App_Code文件夹的更改会导致整个应用程序重新编译。对于大型项目,这可能不受欢迎,而且很耗时。为此,鼓励大家将代码进行模块化处理 到不同的类库中,按逻辑上相关的类集合进行组织。应用程序专用的辅助类大多应当放置在App_Code文件夹中。
App_Code文件夹中存放的所有类文件应当使用相同的语言。如果类文件使用两种或多种语言编写,则必须创建特定语言的子目录,以包含用每种语言编写的类。一旦根据语言组织这些类文件,就要在web.config文件中为每个子目录添加一个设置:
<compilation>
<codeSubDirectories>
<add directoryName="VBFolder" />
</codeSubDirectories>
</compilation>
重要的是,特定语言的子目录应在web.config文件中注册,否则,不管它们属于哪个文件夹,App_Code文件夹下 的所有文件将被编译成一个单独的程序集。上述配置脚本描述了这么一种情况,即所有的C#文件都放在App_Code文件夹的根目录下,而把几个 Visual Basic .NET类文件移入VBFolder目录中。如果<codeSubDirectories>节中提到的目录不存在,则会收到一个编译错误提 示。
App_Code根文件夹中的文件被编译成App_Code_xxx.dll程序集,其中xxx是随机生成的字符序列。一个 给定子目录中的文件将被编译成一个名为App_SubCode_xxx_yyy.dll的动态创建的程序集,其中xxx指示子目录的名称,而yyy是一个 随机字符序列。只有在应用程序根目录中的web.config文件中进行了设置,<codeSubDirectories>节才有效。
在App_Code目录或任何其他子目录中放置一个assemblyinfo.cs文件,可以创建一个强命名的程序集。显然,如果该文件夹包含Visual Basic .NET文件,那么将使用assemblyinfo.vb文件。程序集配置文件可以引用一个.snk文件来保存强名称的密钥。
注意 给一个程序集设置一个强名称,首先必须获得一个公开/私有密钥对。通过使用强名称(Strong Name)工具(sn.exe),可以获得这样一个密钥对。强名称工具是我们可以在.NET Framework的安装路径中发现的SDK binary之一。密钥对文件通常有一个.snk扩展名。可以将该文件保存到一个应用程序文件夹中,并在assemblyinfo.cs文件中引用它,如下所示:
[assembly: AssemblyKeyFileAttribute(@"yourKeyPair.snk")]
注意,Visual Basic .NET是在包含Visual Studio Solution的目录中寻找密钥文件,而C#编译器则在包含该binary的目录中寻找密钥文件。据此可知,用此属性调整我们使用的路径,或者把密钥文件放在合适的文件夹中。
在随后发生的任何重新生成中,程序集的名称将发生变化。同时,老的AppDomain请求一结束,就删除老的程序集。
App_Code文件夹并非只能包含类文件。特别是,它可以包含并能自动地处理代表数据架构的XSD文件。把一个XSD文件 添加到该文件夹中时,编译器将把它解析成一个有类型的DataSet类,并将它添加到应用程序作用域中。在ASP.NET 1.x中,这一工作由Visual Studio .NET向导,使用一个命令行实用程序(xsd.exe)完成的。
注意 使用web.config文件注册一个组件(例如,一个自定义的服务器控件或一个自定义的HTTP处理程序)时,通常要求指定包含该代码的程序集名称。如 果该组件定义在App_Code文件夹中,则应该用什么名称来指示程序集?在这种情况下,只是忽略程序集信息,并规定完整的类名即可。如果没有规定任何程 序集,则ASP.NET运行库将试图从任何已装载的程序集中装入该类,包括为App_Code文件夹动态创建的程序集。
4. App_Data文件夹
App_Data文件夹应该包含应用程序的本地数据存储。它通常以文件(诸如Microsoft Access或Microsoft SQL Server Express数据库、XML文件、文本文件以及应用程序支持的任何其他文件)形式包含数据存储。该文件夹内容不由ASP.NET处理。该文件夹是ASP.NET提供程序存储自身数据的默认位置。
注意 默认ASP.NET帐户被授予对文件夹的完全访问权限。如果碰巧要改变ASP.NET帐户,一定要确保新帐户被授予对该文件夹的读/写访问权。
5. App_GlobalResources文件夹
正如其他应用程序一样,ASP.NET应用程序也可以使用资源,而且通常应该使用资源。资源是隔离应用程序用户界面的可局部 化部分的一种有效方法。一般而言,资源是与程序相关的不可执行的文本。典型的资源有图像、图标、文本和附属文件,但是任何可序列化的对象也可以被看作资 源。应用程序资源存储在应用程序的外部,这样就能在不影响和重新编译应用程序本身的情况下重新编译和替换它们。
ASP.NET应用程序需要有一个主要程序集来保存应用程序默认的或中性的资源。此外,还要部署许多附属程序集,它们中各自 包含我们需要支持的某种文化的本地化资源。在ASP.NET 1.x中,编译一个程序集内的资源有点麻烦。需要手动地将基于XML的资源文件(那些带.res扩展名的资源)编译成.resources二进制文件。这 些文件既可以嵌入到一个.NET可执行文件中,也可以编译成附属程序集。使用资源文件生成器实用程序resgen.exe,将文本和基于XML的资源文件 转变为.resource文件。资源文件名称遵循baseName.cultureName.resource命名约定,其中baseName通常是应用 程序的名称:
resgen.exe ProAspNet20.resx ProAspNet20.it.resources
创建.resource文件以后,应当把它嵌入到一个程序集中,甚至可以作为一个资源容器来使用。要把一个资源文件嵌入到一个附属程序集中,可以使用程序集连接器工具(al.exe)。在命令行上,指出程序集所使用的文化(如下面示例中的it,它代表意大利)和名称。
al /out:ProAspNet20.resources.dll /c:it /embed:ProAspNet20.it.resources
在编译附属程序集之后,它们将有相同的名称。将它们部署到不同的子目录中,分别按文化命名。
幸运的是,对于ASP.NET 2.0,附属程序集的时代已经一去不复返了。更准确地说,附属程序集仍然存在,但是由于App_GlobalResources保留文件夹,对开发人员来说它们已经成为过去的事情。
该文件夹中的任何定位的.resx文件自动地被编译成附属程序 集。.resx文件的名称包含文化信息,以帮助ASP.NET运行库环境的程序集生成。如下文件,resources.resx, resources.it.resx, resources.fr.resx,生成中性程序集以及适合于意大利(Italian)和法国(French)文化的附属程序集。如果没有要求特定文 化,则中性程序集是默认的文化资源。
.asax应用程序根目录。
通常是 Global.asax 文件,该文件包含从 HttpApplication 类派生并表示该应用程序的代码。
有关更多信息,请参见 Global.asax 语法。
.ascx
应用程序根目录或子目录。
Web 用户控件文件,该文件定义自定义、可重复使用的用户控件。
有关更多信息,请参见 ASP.NET 用户控件。
.ashx
应用程序根目录或子目录。
一般处理程序文件,该文件包含实现 IHttpHandler 接口以处理所有传入请求的代码。
有关更多信息,请参见 HTTP 处理程序介绍。
.asmx
应用程序根目录或子目录。
XML Web services 文件,该文件包含通过 SOAP 方式可用于其他 Web 应用程序的类和方法。
有关更多信息,请参见 XML Web 服务的发布和部署。
.aspx
应用程序根目录或子目录。
ASP.NET Web 窗体文件,该文件可包含 Web 控件和其他业务逻辑。
有关更多信息,请参见 ASP.NET 网页和 ASP.NET Web 服务器控件。
.axd
应用程序根目录。
跟踪查看器文件,通常是 Trace.axd。
有关更多信息,请参见 ASP.NET 跟踪。
.browser
App_Browsers 子目录。
浏览器定义文件,用于标识客户端浏览器的启用功能。
有关更多信息,请参见 ASP.NET Web 服务器控件和浏览器功能。
.cd
应用程序根目录或子目录。
类关系图文件。
有关更多信息,请参见使用类关系图。
.compile
Bin 子目录。
预编译的 stub(存根)文件,该文件指向相应的程序集。可执行文件类型(.aspx、ascx、.master、主题文件)已经过预编译并放在 Bin 子目录下。
有关更多信息,请参见 ASP.NET 网站预编译概述。
.config
应用程序根目录或子目录。
通常是 Web.config 配置文件,该文件包含其设置配置各种 ASP.NET 功能的 XML 元素。
有关更多信息,请参见 ASP.NET 配置文件。
.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。
有关更多信息,请参见 XML Web 服务的发布和部署。
.dsdgm、.dsprototype
应用程序根目录或子目录。
分布式服务关系图 (DSD) 文件,该文件可以添加到任何提供或使用 Web services 的 Visual Studio 解决方案,以便对 Web service 交互的结构视图进行反向工程处理。
有关更多信息,请参见 XML Web 服务的发布和部署。
.dll
Bin 子目录。
已编译的类库文件。或者,可以将类的源代码放在 App_Code 子目录下。
有关更多信息,请参见 ASP.NET 网站中的共享代码文件夹。
.licx、.webinfo
应用程序根目录或子目录。
许可证文件。控件创作者可以通过授权方法来检查用户是否得到使用控件的授权,从而帮助保护自己的知识产权。
有关更多信息,请参见如何:License 组件和控件。
.master
应用程序根目录或子目录。
母版页,它定义应用程序中引用母版页的其他网页的布局。
有关更多信息,请参见 ASP.NET 母版页。
.mdb、.ldb
App_Data 子目录。
Access 数据库文件。
有关更多信息,请参见通过 ASP.NET 访问数据。
.mdf
App_Data 子目录。
SQL 数据库文件。
有关更多信息,请参见通过 ASP.NET 访问数据。
.msgx、.svc
应用程序根目录或子目录。
Indigo Messaging Framework (MFx) service 文件。
.rem
应用程序根目录或子目录。
远程处理程序文件。
有关更多信息,请参见使用 SOAP 扩展修改 SOAP 消息。
.resources
App_GlobalResources 或 App_LocalResources 子目录。
资源文件,该文件包含指向图像、可本地化文本或其他数据的资源字符串。
有关更多信息,请参见应用程序中的资源或如何:为 ASP.NET 网站创建资源文件。
.resx
App_GlobalResources 或 App_LocalResources 子目录。
资源文件,该文件包含指向图像、可本地化文本或其他数据的资源字符串。
有关更多信息,请参见应用程序中的资源或如何:为 ASP.NET 网站创建资源文件。
.sdm、.sdmDocument
应用程序根目录或子目录。
系统定义模型 (SDM) 文件。
有关更多信息,请参见系统定义模型 (SDM) 概述。
.sitemap
应用程序根目录。
站点地图文件,该文件包含网站的结构。ASP.NET 中附带了一个默认的站点地图提供程序,它使用站点地图文件可以很方便地在网页上显示导航控件。
有关更多信息,请参见 ASP.NET 站点导航。
.skin
App_Themes 子目录。
用于确定显示格式的外观文件。
有关更多信息,请参见 ASP.NET 主题和外观。
.sln
Visual Web Developer 项目目录。
Visual Web Developer 项目的解决方案文件。
有关更多信息,请参见项目和解决方案。
.soap
应用程序根目录或子目录。
SOAP 扩展文件。
有关更多信息,请参见使用 SOAP 扩展修改 SOAP 消息
其实你这种写法相当于多个类文件。同一个命名空间可以有多个类。namespace
a{
public
class
BBB{...}
public
class
CCC{...}
}
同理他等于
namespace
a{
public
class
BBB{....}
}
namespace
a{
public
class
CCC{....}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)