Compartir a través de


BuildProvider Clase

Definición

Define un conjunto de propiedades y métodos para generar código fuente dentro del entorno de generación de ASP.NET. Esta clase es abstracta.

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
Herencia
BuildProvider
Derivado

Ejemplos

En el ejemplo de código siguiente se muestra una implementación sencilla del proveedor de compilación, que hereda de la clase base abstracta BuildProvider . El proveedor de compilación invalida los CodeCompilerTypemiembros , GetGeneratedTypey GenerateCode de la clase base. En el ejemplo no se incluye la implementación de la SampleClassGenerator clase . Para obtener más información, consulte la información general de la CodeCompileUnit clase.

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

Comentarios

El entorno de compilación ASP.NET usa BuildProvider objetos para generar código fuente para distintos tipos de archivo dentro de una aplicación. Las clases derivadas de BuildProvider proporcionan principalmente código fuente para archivos, páginas web, recursos y otros elementos personalizados.

Normalmente, no se crea una instancia de la BuildProvider clase directamente. En su lugar, implementa una clase que deriva de BuildProvidery configura la BuildProvider implementación para su uso en el entorno de compilación de ASP.NET.

Las instancias de la BuildProvider clase se usan con AssemblyBuilder objetos para compilar uno o varios archivos en un ensamblado compilado. Una BuildProvider instancia genera código fuente en el idioma adecuado para los archivos individuales y el AssemblyBuilder objeto combina el origen aportado por cada BuildProvider instancia en un único ensamblado.

El entorno de compilación ASP.NET usa instancias de la BuildProvider clase para compilar archivos dentro de una aplicación. La VirtualPath propiedad de la BuildProvider clase indica la ruta de acceso del archivo que se va a compilar. La extensión de archivo de cada archivo dentro de una aplicación se asigna a un proveedor de compilación correspondiente. El entorno de compilación ASP.NET inicializa una BuildProvider instancia para cada archivo en función de la extensión de archivo y usa los BuildProvider métodos para generar código fuente para el archivo. El entorno de compilación ASP.NET pasa un AssemblyBuilder objeto basado en el lenguaje del compilador preferido y el contexto del archivo a los BuildProvider métodos al compilar un ensamblado a partir de uno o varios archivos, de modo que la BuildProvider instancia pueda contribuir con código fuente para su archivo al ensamblado general.

Para definir acciones de compilación personalizadas para un tipo de archivo dentro de una aplicación de ASP.NET, debe derivar una clase de , implementar miembros dentro de BuildProviderla clase derivada para compilar el tipo de archivo y configurar el proveedor de compilación para la extensión de archivo correspondiente dentro del archivo de configuración de la aplicación.

El add elemento especifica la extensión de archivo para los archivos admitidos y si el proveedor de compilación admite archivos de código, archivos web, archivos de recursos o todos los archivos. Use el type atributo para especificar el nombre de tipo completo de la implementación del proveedor de compilación. Use la BuildProviderAppliesToAttribute clase para especificar si el proveedor de compilación se aplica a los archivos del directorio App_Code, a los archivos de un directorio de contenido web, a los recursos globales o locales, o a todos los archivos. Use el extension atributo para especificar la extensión de archivo utilizada para identificar los archivos que admite la BuildProvider clase . Use la BuildProviderCollection clase para examinar los proveedores de compilación en un archivo de configuración. Para obtener más información sobre cómo configurar un proveedor de compilación, vea buildProviders Element for compilation (ASP.NET Configuración Schema) (Elemento buildProviders para compilación [esquema de ASP.NET Configuración]).

Para implementar un proveedor de compilación que genera código fuente para un tipo de archivo personalizado, derive una clase de BuildProvidere invalide el método para generar código GenerateCode fuente para el tipo de archivo admitido. El origen generado se agrega al AssemblyBuilder objeto en forma de un gráfico CodeDOM o como contenido que representa un archivo de código fuente físico. Si el proveedor de compilación requiere un lenguaje de programación específico, invalide la CodeCompilerType propiedad para devolver un CompilerType objeto para el lenguaje de programación admitido. Si el proveedor de compilación no requiere un lenguaje de programación específico, no invalide la CodeCompilerType propiedad ; use la implementación de clase base, que indica que el proveedor de compilación puede usar cualquier lenguaje de .NET Framework, como Visual Basic o C#.

Para implementar un proveedor de compilación que genera código fuente para el contenido web, derive una clase de BuildProvider e invalide el GetGeneratedType método para devolver para Type la clase generada por BuildProvider. Invalide el GenerateCode método para generar código fuente para el tipo proporcionado por el archivo admitido.

Nota

Agregar una clase personalizada BuildProvider al archivo Web.config funciona en un sitio web de ASP.NET, pero no funciona en un proyecto de aplicación web de ASP.NET. En un proyecto de aplicación web, el código generado por la BuildProvider clase no se puede incluir en la aplicación. Para obtener más información, consulte ASP.NET Web Application Project Información general sobre la precompilación.

Constructores

BuildProvider()

Inicializa una nueva instancia de la clase BuildProvider.

Propiedades

CodeCompilerType

Representa el tipo de compilador utilizado por un proveedor de generación para generar código fuente para un tipo de archivo personalizado.

ReferencedAssemblies

Representa los ensamblados que se van a compilar con el código fuente que genera el proveedor de compilación.

VirtualPath

Representa el archivo que la implementación de este proveedor de compilación va a crear.

VirtualPathDependencies

Representa una colección de rutas de acceso virtual que es necesario compilar para que el proveedor de generación pueda generar código.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GenerateCode(AssemblyBuilder)

Genera código fuente para la ruta de acceso virtual del proveedor de generación y agrega el código fuente a un generador de ensamblado especificado.

GetCodeCompileUnit(IDictionary)

Representa el contenedor para el gráfico CodeDOM generado.

GetCustomString(CompilerResults)

Genera una cadena para conservar en el ensamblado compilado.

GetDefaultCompilerType()

Devuelve la configuración del compilador para el lenguaje predeterminado de la aplicación.

GetDefaultCompilerTypeForLanguage(String)

Devuelve la configuración del compilador para el proveedor de compilación basándose en el lenguaje especificado.

GetGeneratedType(CompilerResults)

Devuelve un tipo generado por el proveedor de compilación de la ruta de acceso virtual.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetResultFlags(CompilerResults)

Devuelve un valor que indica las acciones necesarias cuando se compila una ruta de acceso virtual.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
OpenReader()

Abre un lector de texto para leer de la ruta de acceso virtual del objeto de proveedor de compilación actual.

OpenReader(String)

Abre un lector de texto para leer de una ruta de acceso virtual especificada.

OpenStream()

Abre una secuencia para leer la ruta de acceso virtual del objeto de proveedor de compilación actual.

OpenStream(String)

Abre una secuencia para leer de una ruta de acceso virtual especificada.

ProcessCompileErrors(CompilerResults)

Cuando se invalida en una clase derivada, permite revisar los mensajes del error del compilador para que pueda modificarlos para proporcionar más información.

RegisterBuildProvider(String, Type)

Registra un proveedor de compilación.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también