Compartir a través de


AssemblyBuilder Clase

Definición

Proporciona un contenedor para compilar un ensamblado de una o más rutas de acceso virtuales dentro de un proyecto ASP.NET.

public ref class AssemblyBuilder
public class AssemblyBuilder
type AssemblyBuilder = class
Public Class AssemblyBuilder
Herencia
AssemblyBuilder

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 la implementación del GenerateCode método, el proveedor de compilación agrega el código generado para la compilación del ensamblado mediante el CreateCodeFile método . En el ejemplo no se incluye la implementación de la SampleClassGenerator clase . Para obtener más información, vea 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()
    {
        // Set the compiler to use Visual Basic.
        _compilerType = GetDefaultCompilerTypeForLanguage("C#");
    }

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

    // Define a method that returns details for the 
    // code compiler for this build provider.
    public string GetCompilerTypeDetails()
    {
        StringBuilder details = new StringBuilder("");

        if (_compilerType != null)
        {
            // Format a string that contains the code compiler
            // implementation, and various compiler details.

            details.AppendFormat("CodeDomProvider type: {0}; \n",
                _compilerType.CodeDomProviderType.ToString());
            details.AppendFormat("Compiler debug build = {0}; \n",
                _compilerType.CompilerParameters.IncludeDebugInformation.ToString());
            details.AppendFormat("Compiler warning level = {0}; \n",
                _compilerType.CompilerParameters.WarningLevel.ToString());

            if (_compilerType.CompilerParameters.CompilerOptions != null)
            {
                details.AppendFormat("Compiler options: {0}; \n",
                    _compilerType.CompilerParameters.CompilerOptions.ToString());
            }
        }
        return details.ToString();
    }

    // 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.CreateGenerator().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 a method that returns details for the 
    ' code compiler for this build provider.
    Public Function GetCompilerTypeDetails() As String
        Dim details As StringBuilder = New StringBuilder("")

        If Not _compilerType Is Nothing Then
            ' Format a string that contains the code compiler
            ' implementation, and various compiler details.

            details.AppendFormat("CodeDomProvider type: {0}; ", _
                _compilerType.CodeDomProviderType.ToString())
            details.AppendFormat("Compiler debug build = {0}; ", _
                _compilerType.CompilerParameters.IncludeDebugInformation.ToString())
            details.AppendFormat("Compiler warning level = {0}; ", _
                _compilerType.CompilerParameters.WarningLevel.ToString())

            If Not _compilerType.CompilerParameters.CompilerOptions Is Nothing Then
                details.AppendFormat("Compiler options: {0}; ", _
                    _compilerType.CompilerParameters.CompilerOptions.ToString())
            End If
        End If
        Return details.ToString()
    End Function

    ' 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.CreateGenerator().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

Las instancias de la AssemblyBuilder clase se usan con BuildProvider métodos de clase para compilar uno o varios archivos en un ensamblado compilado.

La BuildProvider clase define la funcionalidad de compilación para archivos individuales y la AssemblyBuilder clase combina el código fuente aportado por cada BuildProvider instancia en un único ensamblado. El entorno de compilación ASP.NET pasa un AssemblyBuilder objeto a los BuildProvider métodos al compilar un ensamblado a partir de uno o varios archivos, de modo que cada BuildProvider instancia pueda contribuir al código fuente de su archivo al ensamblado general.

El entorno de compilación de ASP.NET determina el lenguaje y el compilador requeridos por los archivos del proyecto, en función de la BuildProvider.CodeCompilerType propiedad . Los archivos del entorno de compilación se agrupan en función de su configuración del compilador y compila un ensamblado a partir de archivos que requieren el mismo compilador.

La CodeDomProvider propiedad indica la CodeDomProvider implementación que usa el entorno de compilación de ASP.NET para compilar un ensamblado a partir del código fuente aportado por cada BuildProvider implementación.

Un BuildProvider objeto contribuye al código fuente en forma de un gráfico CodeDOM mediante el AddCodeCompileUnit método . Un BuildProvider objeto contribuye al código fuente almacenado en un archivo físico mediante el CreateCodeFile método .

Una vez que cada BuildProvider objeto contribuye al código fuente mediante los métodos adecuadosAssemblyBuilder, el entorno de compilación ASP.NET usa la AssemblyBuilder clase para compilar el código fuente recopilado en un ensamblado.

Propiedades

CodeDomProvider

Obtiene el compilador utilizado para generar el código fuente en un ensamblado.

Métodos

AddAssemblyReference(Assembly)

Agrega un ensamblado al que hace referencia el código fuente generado para un archivo.

AddCodeCompileUnit(BuildProvider, CodeCompileUnit)

Agrega código fuente para el ensamblado en el formulario de un gráfico CodeDOM.

CreateCodeFile(BuildProvider)

Permite a un proveedor de generación crear un archivo de código fuente temporal e incluir el archivo de código fuente en la compilación de ensamblado.

CreateEmbeddedResource(BuildProvider, String)

Permite a un proveedor de generación crear un archivo de recursos e incluirlo en la compilación de ensamblado.

Equals(Object)

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

(Heredado de Object)
GenerateTypeFactory(String)

Inserta una plantilla de generación rápida de objetos para un tipo en el ensamblado compilado.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetTempFilePhysicalPath(String)

Genera una ruta de acceso de archivo temporal.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también