Compartir por


BuildProvider Clase

Definición

Define un conjunto de propiedades y métodos para generar código fuente dentro del entorno de compilació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. El ejemplo no 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 de 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 lenguaje 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 ASP.NET entorno de compilación inicializa una BuildProvider instancia de 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 de 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 al código fuente de 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 que se usa 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, consulte buildProviders Element for compilation (ASP.NET Settings Schema).

Para implementar un proveedor de compilación que genere código fuente para un tipo de archivo personalizado, derive una clase de BuildProvidere invalide el GenerateCode método para generar código fuente para el tipo de archivo admitido. El origen generado se agrega al AssemblyBuilder objeto en forma de 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 genere código fuente para el contenido web, derive una clase de BuildProvider e invalide el método para devolver para GetGeneratedTypeType 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 Información general sobre la precompilación del proyecto de aplicación web.

Constructores

Nombre Description
BuildProvider()

Inicializa una nueva instancia de la clase BuildProvider.

Propiedades

Nombre Description
CodeCompilerType

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

ReferencedAssemblies

Representa los ensamblados que se van a compilar con el origen generado por el proveedor de compilación.

VirtualPath

Representa el archivo que va a compilar esta implementación del proveedor de compilación.

VirtualPathDependencies

Representa una colección de rutas de acceso virtuales que se deben compilar antes de que el proveedor de compilación genere código.

Métodos

Nombre Description
Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
GenerateCode(AssemblyBuilder)

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

GetCodeCompileUnit(IDictionary)

Representa el contenedor para el gráfico CodeDOM generado.

GetCustomString(CompilerResults)

Genera una cadena que se va a conservar en el ensamblado compilado.

GetDefaultCompilerType()

Devuelve la configuración del compilador para el idioma predeterminado en la aplicación.

GetDefaultCompilerTypeForLanguage(String)

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

GetGeneratedType(CompilerResults)

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

GetHashCode()

Actúa como 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 Objectactual.

(Heredado de Object)
OpenReader()

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

OpenReader(String)

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

OpenStream()

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

OpenStream(String)

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

ProcessCompileErrors(CompilerResults)

Cuando se invalida en una clase derivada, le permite revisar los mensajes de 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