BuildProvider 类

定义

定义一组用于在 ASP.NET 生成环境中生成源代码的属性和方法。 此类为抽象类。

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
继承
BuildProvider
派生

示例

下面的代码示例演示了从抽象 BuildProvider 基类继承的简单生成提供程序实现。 生成提供程序将CodeCompilerTypeGetGeneratedType替代基类的成员和GenerateCode成员。 该示例不包括类的 SampleClassGenerator 实现。 有关详细信息,请参阅 CodeCompileUnit 类概述。

using System;
using System.Collections;
using System.IO;
using System.Text;
using System.Web;
using System.Web.Compilation;
using System.CodeDom.Compiler;
using System.CodeDom;
using System.Security;
using System.Security.Permissions;

// Define a simple build provider implementation.
[PermissionSet(SecurityAction.Demand, Unrestricted = true)]
public class SampleBuildProvider : BuildProvider
{
    // Define an internal member for the compiler type.
    protected CompilerType _compilerType = null;

    public SampleBuildProvider()
    {
        _compilerType = GetDefaultCompilerTypeForLanguage("C#");
    }

    // Return the internal CompilerType member 
    // defined in this implementation.
    public override CompilerType CodeCompilerType
    {
        get { return _compilerType; }
    }

    // Define the build provider implementation of the GenerateCode method.
    public override void GenerateCode(AssemblyBuilder assemBuilder)
    {
        // Generate a code compile unit, and add it to
        // the assembly builder.

        TextWriter tw = assemBuilder.CreateCodeFile(this);
        if (tw != null)
        {
            try
            {
                // Generate the code compile unit from the virtual path.
                CodeCompileUnit compileUnit = SampleClassGenerator.BuildCompileUnitFromPath(VirtualPath);

                // Generate the source for the code compile unit, 
                // and write it to a file specified by the assembly builder.
                CodeDomProvider provider = assemBuilder.CodeDomProvider;
                provider.GenerateCodeFromCompileUnit(compileUnit, tw, null);
            }
            finally
            {
                tw.Close();
            }
        }
    }

    public override System.Type GetGeneratedType(CompilerResults results)
    {
        string typeName = SampleClassGenerator.TypeName;

        return results.CompiledAssembly.GetType(typeName);
    }
}
Imports System.Collections
Imports System.IO
Imports System.Text
Imports System.Web
Imports System.Web.Compilation
Imports System.CodeDom.Compiler
Imports System.CodeDom
Imports System.Security
Imports System.Security.Permissions

<PermissionSet(SecurityAction.Demand, Unrestricted := true)> _
Public Class SampleBuildProvider
    Inherits BuildProvider

    Protected _compilerType As CompilerType = Nothing

    Public Sub New()
        _compilerType = GetDefaultCompilerType()
    End Sub

    ' Return the internal CompilerType member 
    ' defined in this implementation.
    Public Overrides ReadOnly Property CodeCompilerType() As CompilerType
        Get
            CodeCompilerType = _compilerType
        End Get
    End Property


    ' Define the build provider implementation of the GenerateCode method.
    Public Overrides Sub GenerateCode(ByVal assemBuilder As AssemblyBuilder)
        ' Generate a code compile unit, and add it to
        ' the assembly builder.

        Dim tw As TextWriter = assemBuilder.CreateCodeFile(Me)
        If Not tw Is Nothing Then
            Try
                ' Generate the code compile unit from the virtual path.
                Dim compileUnit As CodeCompileUnit = _
                        SampleClassGenerator.BuildCompileUnitFromPath(VirtualPath)

                ' Generate the source for the code compile unit, 
                ' and write it to a file specified by the assembly builder.
                Dim provider As CodeDomProvider = assemBuilder.CodeDomProvider
                provider.GenerateCodeFromCompileUnit(compileUnit, tw, Nothing)
            Finally
                tw.Close()
            End Try

        End If
    End Sub

    Public Overrides Function GetGeneratedType(ByVal results As CompilerResults) As System.Type
        Dim typeName As String = SampleClassGenerator.TypeName

        Return results.CompiledAssembly.GetType(typeName)
    End Function

End Class

注解

ASP.NET 生成环境使用 BuildProvider 对象为应用程序中的不同文件类型生成源代码。 派生自 BuildProvider 主要为文件、网页、资源和其他自定义项提供源代码的类。

通常,不会直接创建类的 BuildProvider 实例。 而是实现派生自 BuildProvider的类,并将实现配置为 BuildProvider 在 ASP.NET 生成环境中使用。

类的 BuildProvider 实例与对象一起使用 AssemblyBuilder ,以将一个或多个文件生成到已编译的程序集中。 实例 BuildProvider 使用相应的语言为单个文件生成源代码,对象 AssemblyBuilder 将每个 BuildProvider 实例提供的源合并到单个程序集中。

ASP.NET 生成环境使用类的 BuildProvider 实例在应用程序中生成文件。 VirtualPath类的属性BuildProvider指示要生成的文件的路径。 应用程序中每个文件的文件扩展名映射到相应的生成提供程序。 ASP.NET 生成环境根据文件扩展名初始化 BuildProvider 每个文件的实例,并使用 BuildProvider 方法为文件生成源代码。 ASP.NET 生成环境根据首选编译器语言和文件BuildProvider上下文将对象传递给AssemblyBuilder从一个或多个文件生成程序集时的方法,以便BuildProvider实例可以将其文件的源代码贡献给整个程序集。

若要为 ASP.NET 应用程序中的文件类型定义自定义生成操作,必须派 BuildProvider生类,在派生类中实现成员以生成文件类型,并为应用程序配置文件中的相应文件扩展名配置生成提供程序。

add 元素指定受支持文件的文件扩展名,以及生成提供程序是否支持代码文件、Web 文件、资源文件或所有文件。 使用 type 特性指定生成提供程序实现的完全限定类型名称。 使用 BuildProviderAppliesToAttribute 类指定生成提供程序是应用于App_Code目录中的文件、Web 内容目录中的文件、全局资源还是本地资源,还是应用于所有文件。 使用 extension 属性指定用于标识类支持的文件的 BuildProvider 文件扩展名。 使用 BuildProviderCollection 类检查配置文件中的生成提供程序。 有关配置生成提供程序的详细信息,请参阅 buildProviders 元素,用于编译 (ASP.NET 设置架构)

若要实现生成提供程序,该提供程序为自定义文件类型生成源代码,请派 BuildProvider生一个类,并重写 GenerateCode 该方法以生成支持的文件类型的源代码。 生成的源以 CodeDOM 图形的形式或表示物理源代码文件的内容添加到 AssemblyBuilder 对象中。 如果生成提供程序需要特定的编程语言,请重写属性 CodeCompilerType 以返回 CompilerType 受支持的编程语言的对象。 如果生成提供程序不需要特定的编程语言,请不要重写CodeCompilerType属性;请使用基类实现,指示生成提供程序可以使用任何.NET Framework语言,例如Visual Basic或 C#。

若要实现生成提供程序,该提供程序为 Web 内容生成源代码,请派 BuildProvider 生类并重写 GetGeneratedType 该方法以返回 Type 由其 BuildProvider生成的类。 GenerateCode重写该方法以生成受支持文件提供类型的源代码。

备注

将自定义 BuildProvider 类添加到Web.config文件适用于 ASP.NET 网站,但在 ASP.NET Web 应用程序项目中不起作用。 在 Web 应用程序项目中,类生成的 BuildProvider 代码不能包含在应用程序中。 有关详细信息,请参阅 ASP.NET Web 应用程序Project预编译概述

构造函数

BuildProvider()

初始化 BuildProvider 类的新实例。

属性

CodeCompilerType

表示生成提供程序为自定义文件类型生成源代码所使用的编译器类型。

ReferencedAssemblies

表示要用生成提供程序生成的源代码进行编译的程序集。

VirtualPath

表示要由此生成提供程序实现生成的文件。

VirtualPathDependencies

表示在生成提供程序生成代码之前必须生成的虚拟路径的集合。

方法

Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GenerateCode(AssemblyBuilder)

为生成提供程序的虚拟路径生成源代码,并将源代码添加到指定程序集生成器。

GetCodeCompileUnit(IDictionary)

表示生成的 CodeDOM 关系图的容器。

GetCustomString(CompilerResults)

生成要在编译后的程序集中保留的字符串。

GetDefaultCompilerType()

返回应用程序中默认语言的编译器设置。

GetDefaultCompilerTypeForLanguage(String)

根据指定的语言返回生成提供程序的编译器设置。

GetGeneratedType(CompilerResults)

返回生成提供程序从虚拟路径生成的类型。

GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetResultFlags(CompilerResults)

返回指示生成虚拟路径时所需操作的值。

GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
OpenReader()

打开文本读取器以从当前生成提供程序对象的虚拟路径读取。

OpenReader(String)

打开文本读取器以从指定的虚拟路径读取。

OpenStream()

打开流以读取当前生成提供程序对象的虚拟路径。

OpenStream(String)

打开流以从指定的虚拟路径读取。

ProcessCompileErrors(CompilerResults)

当在派生类中被重写时,能够查看编译器错误消息,以便将其修改为提供更多信息。

RegisterBuildProvider(String, Type)

注册一个生成提供程序。

ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于

另请参阅