• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET项目中各个文件夹的含义

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
ASP.NET项目中各个文件夹的(9php.com)含义

1.  Bin文件夹
Bin文件夹包含应用程序所需的(9php.com),用于控件、组件或者需要引用的(9php.com)任何其他代码的(9php.com)可部署程序集。该目录中存在的(9php.com)任何.dll文  件将自动地链接到应用程序。如果在该文件夹中留有不用的(9php.com)或过期的(9php.com)文件,则可能出现“二义性引用(ambiguous  reference)”异常的(9php.com)风险。换句话说,如果两个不同的(9php.com)程序集定义相同的(9php.com)类(相同的(9php.com)命名空间和名称),则ASP.NET运行库不能决定应该使用哪一  个程序集,从而抛出一个异常。在开发时,当我们重新命名一个项目或一个程序集的(9php.com)名称时,这是常见的(9php.com)错误。为了避免这种错误,一定不要在该文件夹中保留任何  不必要的(9php.com)程序集,或者至少要从配置文件的(9php.com)<assemblies>节中删除如下代码行:
<add  assembly="*"  />
在表1.10所列的(9php.com)所有文件夹中,只有Bin可以被ASP.NET  1.x应用程序识别。该文件夹是强制性的(9php.com)。
2.  App_Browser文件夹
该可选的(9php.com)文件夹包含.browser文件。.browser文件描述浏览器(不管是移动设备浏览器,还是台式机浏览器)的(9php.com)特  征和功能。ASP.NET在安装路径下的(9php.com)Config\Browser文件夹中安装了大量.browser文件,这些文件供所有应用程序共享。我们只是把  当前应用程序特有的(9php.com)浏览器文件放在App_Browser文件夹下。.browser文件的(9php.com)内容即时动态地进行编译,以便向ASP.NET运行库提供最新  的(9php.com)浏览器信息。
让我们简单谈谈拥有一个自定义的(9php.com).browser文件可能有帮助的(9php.com)场景。设想应用程序使用了一个在某个浏览器下不能有效呈现的(9php.com)控件。在指定的(9php.com)浏览器中显示宿主页面时,可以编写一个.browser文件,迫使ASP.NET使用一个不同的(9php.com)适配器来生成该控件。
<browsers>
<browser  >
<controlAdapters>
<adapter  c
adapterType="Samples.Adapters.CustomControlAdapter"  />
</controlAdapters>
</browser>
</browsers>
假设browserID与ASP.NET识别的(9php.com)标准浏览器之一相匹配,则上文所示的(9php.com).browser文件指示在指定的(9php.com)浏览器下使用CustomControlAdapter呈现CustomControl。
3.  App_Code文件夹
App_Code文件夹正好在Web应用程序根目录下,其存储所有应当作为应用程序的(9php.com)一部分动态编译的(9php.com)类文件。这些类文件自  动链接到应用程序,而不需要在页面中添加任何显式指令或声明来创建依赖性。App_Code文件夹中放置的(9php.com)类文件可以包含任何可识别的(9php.com)ASP.NET组件  ——自定义控件、辅助类、build提供程序、业务类、自定义提供程序、HTTP处理程序等。
    注意        在开发时,对App_Code文件夹的(9php.com)更改会导致整个应用程序重新编译。对于大型项目,这可能不受欢迎,而且很耗时。为此,鼓励大家将代码进行模块化处理  到不同的(9php.com)类库中,按逻辑上相关的(9php.com)类集合进行组织。应用程序专用的(9php.com)辅助类大多应当放置在App_Code文件夹中。
App_Code文件夹中存放的(9php.com)所有类文件应当使用相同的(9php.com)语言。如果类文件使用两种或多种语言编写,则必须创建特定语言的(9php.com)子目录,以包含用每种语言编写的(9php.com)类。一旦根据语言组织这些类文件,就要在web.config文件中为每个子目录添加一个设置:
<compilation>
<codeSubDirectories>
<add  directoryName="VBFolder"  />
</codeSubDirectories>
</compilation>
重要的(9php.com)是,特定语言的(9php.com)子目录应在web.config文件中注册,否则,不管它们属于哪个文件夹,App_Code文件夹下  的(9php.com)所有文件将被编译成一个单独的(9php.com)程序集。上述配置脚本描述了这么一种情况,即所有的(9php.com)C#文件都放在App_Code文件夹的(9php.com)根目录下,而把几个  Visual  Basic  .NET类文件移入VBFolder目录中。如果<codeSubDirectories>节中提到的(9php.com)目录不存在,则会收到一个编译错误提  示。
App_Code根文件夹中的(9php.com)文件被编译成App_Code_xxx.dll程序集,其中xxx是随机生成的(9php.com)字符序列。一个  给定子目录中的(9php.com)文件将被编译成一个名为App_SubCode_xxx_yyy.dll的(9php.com)动态创建的(9php.com)程序集,其中xxx指示子目录的(9php.com)名称,而yyy是一个  随机字符序列。只有在应用程序根目录中的(9php.com)web.config文件中进行了设置,<codeSubDirectories>节才有效。
在App_Code目录或任何其他子目录中放置一个assemblyinfo.cs文件,可以创建一个强命名的(9php.com)程序集。显然,如果该文件夹包含Visual  Basic  .NET文件,那么将使用assemblyinfo.vb文件。程序集配置文件可以引用一个.snk文件来保存强名称的(9php.com)密钥。
  注意        给一个程序集设置一个强名称,首先必须获得一个公开/私有密钥对。通过使用强名称(Strong  Name)工具(sn.exe),可以获得这样一个密钥对。强名称工具是我们可以在.NET  Framework的(9php.com)安装路径中发现的(9php.com)SDK  binary之一。密钥对文件通常有一个.snk扩展名。可以将该文件保存到一个应用程序文件夹中,并在assemblyinfo.cs文件中引用它,如下所示:
            [assembly:  AssemblyKeyFileAttribute(@"yourKeyPair.snk")]
注意,Visual  Basic  .NET是在包含Visual  Studio  Solution的(9php.com)目录中寻找密钥文件,而C#编译器则在包含该binary的(9php.com)目录中寻找密钥文件。据此可知,用此属性调整我们使用的(9php.com)路径,或者把密钥文件放在合适的(9php.com)文件夹中。
在随后发生的(9php.com)任何重新生成中,程序集的(9php.com)名称将发生变化。同时,老的(9php.com)AppDomain请求一结束,就删除老的(9php.com)程序集。
App_Code文件夹并非只能包含类文件。特别是,它可以包含并能自动地处理代表数据架构的(9php.com)XSD文件。把一个XSD文件  添加到该文件夹中时,编译器将把它解析成一个有类型的(9php.com)DataSet类,并将它添加到应用程序作用域中。在ASP.NET  1.x中,这一工作由Visual  Studio  .NET向导,使用一个命令行实用程序(xsd.exe)完成的(9php.com)。
    注意        使用web.config文件注册一个组件(例如,一个自定义的(9php.com)服务器控件或一个自定义的(9php.com)HTTP处理程序)时,通常要求指定包含该代码的(9php.com)程序集名称。如  果该组件定义在App_Code文件夹中,则应该用什么名称来指示程序集?在这种情况下,只是忽略程序集信息,并规定完整的(9php.com)类名即可。如果没有规定任何程  序集,则ASP.NET运行库将试图从任何已装载的(9php.com)程序集中装入该类,包括为App_Code文件夹动态创建的(9php.com)程序集。
4.  App_Data文件夹
App_Data文件夹应该包含应用程序的(9php.com)本地数据存储。它通常以文件(诸如Microsoft  Access或Microsoft  SQL  Server  Express数据库、XML文件、文本文件以及应用程序支持的(9php.com)任何其他文件)形式包含数据存储。该文件夹内容不由ASP.NET处理。该文件夹是ASP.NET提供程序存储自身数据的(9php.com)默认位置。
  注意        默认ASP.NET帐户被授予对文件夹的(9php.com)完全访问权限。如果碰巧要改变ASP.NET帐户,一定要确保新帐户被授予对该文件夹的(9php.com)读/写访问权。
5.  App_GlobalResources文件夹
正如其他应用程序一样,ASP.NET应用程序也可以使用资源,而且通常应该使用资源。资源是隔离应用程序用户界面的(9php.com)可局部  化部分的(9php.com)一种有效方法。一般而言,资源是与程序相关的(9php.com)不可执行的(9php.com)文本。典型的(9php.com)资源有图像、图标、文本和附属文件,但是任何可序列化的(9php.com)对象也可以被看作资  源。应用程序资源存储在应用程序的(9php.com)外部,这样就能在不影响和重新编译应用程序本身的(9php.com)情况下重新编译和替换它们。
ASP.NET应用程序需要有一个主要程序集来保存应用程序默认的(9php.com)或中性的(9php.com)资源。此外,还要部署许多附属程序集,它们中各自  包含我们需要支持的(9php.com)某种文化的(9php.com)本地化资源。在ASP.NET  1.x中,编译一个程序集内的(9php.com)资源有点麻烦。需要手动地将基于XML的(9php.com)资源文件(那些带.res扩展名的(9php.com)资源)编译成.resources二进制文件。这  些文件既可以嵌入到一个.NET可执行文件中,也可以编译成附属程序集。使用资源文件生成器实用程序resgen.exe,将文本和基于XML的(9php.com)资源文件  转变为.resource文件。资源文件名称遵循baseName.cultureName.resource命名约定,其中baseName通常是应用  程序的(9php.com)名称:
resgen.exe  ProAspNet20.resx  ProAspNet20.it.resources
创建.resource文件以后,应当把它嵌入到一个程序集中,甚至可以作为一个资源容器来使用。要把一个资源文件嵌入到一个附属程序集中,可以使用程序集连接器工具(al.exe)。在命令行上,指出程序集所使用的(9php.com)文化(如下面示例中的(9php.com)it,它代表意大利)和名称。
al  /out:ProAspNet20.resources.dll  /c:it  /embed:ProAspNet20.it.resources
在编译附属程序集之后,它们将有相同的(9php.com)名称。将它们部署到不同的(9php.com)子目录中,分别按文化命名。
幸运的(9php.com)是,对于ASP.NET  2.0,附属程序集的(9php.com)时代已经一去不复返了。更准确地说,附属程序集仍然存在,但是由于App_GlobalResources保留文件夹,对开发人员来说它们已经成为过去的(9php.com)事情。
该文件夹中的(9php.com)任何定位的(9php.com).resx文件自动地被编译成附属程序  集。.resx文件的(9php.com)名称包含文化信息,以帮助ASP.NET运行库环境的(9php.com)程序集生成。如下文件,resources.resx,  resources.it.resx,  resources.fr.resx,生成中性程序集以及适合于意大利(Italian)和法国(French)文化的(9php.com)附属程序集。如果没有要求特定文  化,则中性程序集是默认的(9php.com)文化资源。
App_GlobalResources文件夹中的(9php.com)资源文件是应用程序的(9php.com)全局资源,因而可以从任何页面中引用它。和ASP.NET  1.x相比资源读取结果也极大地简化了:
<asp:Label  Runat="server"  Text="<%$  Resources:ResxFile,  MyResName  %>"  />
可以使用最新的(9php.com)称为Resources的(9php.com)$-表达式以声明的(9php.com)方式绑定全局资源(第5章将详细介绍$-表达式)。该表达式包括两个参数:.resx资源文件的(9php.com)名称(没有扩展名),以及要检索的(9php.com)资源的(9php.com)名称。以编程的(9php.com)方式访问资源,请使用如下代码:
HttpContext.GetGlobalResourceObject(resxFile,  MyResName)
这两个参数都是字符串,并且与$-表达式中的(9php.com)参数具有相同的(9php.com)作用。此外,$-表达式Resources的(9php.com)实现在内部使用GetGlobalResourceObject。
6.  App_LocalResources文件夹
App_LocalResources文件夹位于包含一些ASP.NET页面的(9php.com)文件夹下的(9php.com)一个子目录。该文件夹可以使用位于  目录结构中高一级目录中的(9php.com)页面命名的(9php.com).resx文件进行填充。假定父文件夹包含test.aspx,则可以在App_LocalResources文件夹  中找到一些可用的(9php.com)资源文件如下:test.aspx.resx、test.aspx.it.resx和test.aspx.fr.resx。显然,上述文  件中存储的(9php.com)资源仅对test.aspx页面有影响,因而只能在链接的(9php.com)页面中看见它们(可以使用它们)。
如何访问一个页面特有的(9php.com)资源呢?对于编程访问,可使用如下代码:
HttpContext.GetLocalResourceObject("/ProAspNet20/ResPage.aspx",
"PageResource1.Title")
第1个参数指出页面虚拟路径;第2个参数是资源名称。对于声明式访问,使用meta:ResourceKey属性。例如,
<asp:Button  Runat="server"  meta:resourcekey="ButtonResource1"  />
该声明将一个惟一的(9php.com)资源键与特定按钮实例关联。局部文件.resx包含prefix.name形式的(9php.com)条目,其中prefix  是资源键,而name是绑定控件上的(9php.com)属性名。为了赋予按钮一个本地化标题(Text属性),只要在资源文件中创建一个  ButtonResource1.Text条目即可。
局部和全局资源文件夹中存在的(9php.com)资源文件都被编译,以创建附属程序集的(9php.com)类。最后的(9php.com)结果是开发人员创建.resx文件,并测试该页面。而ASP.NET编译机制会完成其余工作。
7.  App_Themes文件夹
App_Themes文件夹为ASP.NET控件定义主题。主题包含在App_Themes文件夹下的(9php.com)一个文件夹。根据定义,一个主题是一组带有样式信息的(9php.com)文件。主题文件夹中的(9php.com)文件内容被编译,以生成一个类,而该类被页面调用以编程的(9php.com)方式设置主题化控件的(9php.com)样式。
App_Themes文件夹列出应用程序的(9php.com)本地主题。  应用程序还可以继承如下文件夹中定义的(9php.com)全局主题:
%WINDOWS%\Microsoft.NET\Framework\[version]\ASP.NETClientFiles\Themes
从编译的(9php.com)角度看,全局主题和局部主题没有区别。如果一个给定名称的(9php.com)主题,既存在应用程序的(9php.com)本地主题,又存在服务器机器的(9php.com)全局主题,则本地主题优先适用。
8.  App_WebReferences文件夹妞妞基地
在Visual  Studio  .NET  2003中,一个需要访问Web服务的(9php.com)ASP.NET应用程序,将通过“添加Web引用”对话框获得相应的(9php.com).wsdl文件。Web服务的(9php.com)WSDL(Web  Service  Description  Language)文档,对于从页面使用Web服务是不够的(9php.com)。ASP.NET页面最终是一个托管类,并且需要与另一个托管类通信。因此,Web服务被一个  代理类所包装。该代理类是由Visual  Studio使用命令行工具wsdl.exe的(9php.com)服务创建的(9php.com)。该代理类尽量包含与Web服务商的(9php.com)Web方法一样多的(9php.com)方法,并且它结合了Web服务的(9php.com)公共接口  定义的(9php.com)任何自定义的(9php.com)数据类型。
这个操作不需要开发人员付出很大的(9php.com)代价。然而,开发人员显然要依赖于Visual  Studio来生成代理类。如果能够直接把.wsdl文件放在应用程序的(9php.com)目录树的(9php.com)某个地方,并让ASP.NET处理其余的(9php.com)任务,这样不是更容易、更简单  吗?这正好是App_WebReferences文件夹要做的(9php.com)事情。
它识别那些用来描述所绑定的(9php.com)Web服务的(9php.com).wsdl文件,并生成运行时代理类,以便ASP.NET页面能够以类型安全的(9php.com)方式  放置对Web服务的(9php.com)调用。App_WebReferences文件夹可以包含子文件夹。子文件夹的(9php.com)名称驱动最后所得到的(9php.com)代理类的(9php.com)命名空间,而WSDL文件  定义类名。例如,samples.wsdl文件和ProsAspNet20子文件夹将创建一个称为ProAspNet20.Samples的(9php.com)代理类。该动  态创建的(9php.com)程序集称为App_WebReferences.xxx.dll,其中xxx是一个随机的(9php.com)字符序列。
文件夹名称
  文件类型
  注        释
   
Bin
  .dll
  包含应用程序所需的(9php.com)任何预生成的(9php.com)程序集
   
App_Browsers
  .browser
  包含应用程序特有的(9php.com)浏览器定义文件,ASP.NET用它来识别各浏览器及确定它们的(9php.com)功能97xxoo
   
App_Code
  .cs、.vb、.xsd、自定义的(9php.com)文件类型
  包含作为应用程序的(9php.com)一部分编译的(9php.com)类的(9php.com)源文件。当页面被请求时,ASP.NET编译该文件夹中的(9php.com)代码。该文件夹中的(9php.com)代码在应用程序中自动地被引用
   
App_Data
  .mdb、.mdf、.xml
  包含Microsoft  Office  Access和SQL  Express文件以及XML文件或其他数据存储
   
App_GlobalResources
  .resx
  包含在本地化应用程序中以编程方式使用的(9php.com)资源文件
   
App_LocalResources
  .resx
  包含页面范围的(9php.com)资源文件
   
App_Themes
  .skin、.CSS、.xsl、附属文件
  包含一组定义ASP.NET页面和控件外观的(9php.com)文件
   
App_WebReferences
  .wsdl
  包含用以生成代理类的(9php.com)WSDL文件,以及与在应用程序中使用Web服务有关的(9php.com)其他文件

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
初步认识ASP.NETWebForm发布时间:2022-07-10
下一篇:
记一次asp.netcore线上崩溃解决总结发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap