在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
从asp.net 1.0中,如果用户定义了一个新的组件(cs文件),需要预编译组件后application才可以使用。在Asp.net 2.0开始改变了这种使用方式。asp.net 2.0将website的结构进行重组,新添了一些默认的文件夹,这些文件夹用于不同的场合。可以通过“Add Asp.net Folder”添加可用的特殊文件夹。 其中有个App_Code的文件夹,IDE可以自动编译此文件夹内的文件,即:当用户往此文件夹添加或拖入一个新文件时,IDE会自动编译,Application的其它地方可以直接使用编译后的类,并享受VS的IntellSense功能。.net的这个特性是由BuildProvider支持的。BuildProvider提供程序是一个可以插入ASP.NET编译系统,为某些文件类型提供自定义编译支持的组件。通过在编译时解析源文件内容,build提供程序可以自动生成一个合适的源代码代理类。build提供程序生成可编译的代码,并使它与源文件保持同步。当源文件发生变化时,build提供程序再次执行,并更新一切。 内置的提供程序 在Asp.net系统级web.config文件中定义了系统的内置提供程序。
<buildProviders>
<add extension=".aspx" type="System.Web.Compilation.PageBuildProvider"/> <add extension=".ascx" type="System.Web.Compilation.UserControlBuildProvider"/> <add extension=".master" type="System.Web.Compilation.MasterPageBuildProvider"/> <add extension=".asmx" type="System.Web.Compilation.WebServiceBuildProvider"/> <add extension=".ashx" type="System.Web.Compilation.WebHandlerBuildProvider"/> <add extension=".soap" type="System.Web.Compilation.WebServiceBuildProvider"/> <add extension=".resx" type="System.Web.Compilation.ResXBuildProvider"/> <add extension=".resources" type="System.Web.Compilation.ResourcesBuildProvider"/> <add extension=".wsdl" type="System.Web.Compilation.WsdlBuildProvider"/> <add extension=".xsd" type="System.Web.Compilation.XsdBuildProvider"/> <add extension=".js" type="System.Web.Compilation.ForceCopyBuildProvider"/> <add extension=".lic" type="System.Web.Compilation.IgnoreFileBuildProvider"/> <add extension=".licx" type="System.Web.Compilation.IgnoreFileBuildProvider"/> <add extension=".exclude" type="System.Web.Compilation.IgnoreFileBuildProvider"/> <add extension=".refresh" type="System.Web.Compilation.IgnoreFileBuildProvider"/> <add extension=".xoml" type="System.ServiceModel.Activation.WorkflowServiceBuildProvider, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> </buildProviders>
这些提供程序只是实现了System.Web.Compilation.BuildPrivder抽象类的类。BuildProvider包含一个重要的函数:
这个函数用于生成虚拟目录下特定文件类型的源代码,并把生成的源代码添加到指定的程序集生成器(AssemblyBuilder)中。方法内需要使用System.CodeDom命名空间下的类来构建源代码。该命名空间包含可用于生成源代码文档的元素和结构的类,可用来建立源代码文档结构的模型。 定制BuildProvider 分三步完成定制过程: 1 定义文件结构 假设要根据定制.car文件中的设置动态构建一个Car类,以便使该类能够在项目中被多次利用。定做一.car文件类型的结构如下: BuildProvider将根据xml文件的信息创建一个类文件。 2 定制BuildProvider
using System;
using System.IO; using System.Web.Compilation; using System.Xml; using System.CodeDom; namespace MyBuildProvider } CarBuildProvider读取文件的元素及属性,利用System.CodeDom命名空间下的类创建源代码类。 要使定制的BuildProvider起作用,就需要在web.config配置段中注册:
<system.web>
<compilation debug="true"> <buildProviders> <add extension=".car" type="MyBuildProvider.Car"/> </buildProviders> </compilation> </system.web>
3 使用定制的BuildProvider 定义一个.car示例文件如下: 将car示例文件添加到App_Code文件夹下,IDE会自动调用MyBuildProvider为文件生成源代码类。示例文件生成的类代码如下:
using System;
} 在Application的其它地方就可以访问这个类,并使用VS的智能提示。
|
请发表评论