Compartir por


AssemblyBuilder Clase

Definición

Proporciona un contenedor para compilar un ensamblado a partir de una o varias rutas de acceso virtuales dentro de un proyecto de 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 . El ejemplo no incluye la implementación de la SampleClassGenerator clase . Para obtener más información, consulte 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 ASP.NET entorno de compilación 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 . El entorno de compilación agrupa los archivos 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 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 adecuados AssemblyBuilder , el entorno de compilación de ASP.NET usa la AssemblyBuilder clase para compilar el código fuente recopilado en un ensamblado.

Propiedades

Nombre Description
CodeDomProvider

Obtiene el compilador usado para compilar código fuente en un ensamblado.

Métodos

Nombre Description
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 forma de gráfico CodeDOM.

CreateCodeFile(BuildProvider)

Permite que un proveedor de compilación cree un archivo de origen temporal e incluya el archivo de origen en la compilación del ensamblado.

CreateEmbeddedResource(BuildProvider, String)

Permite que un proveedor de compilación cree un archivo de recursos que se incluya en la compilación del ensamblado.

Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
GenerateTypeFactory(String)

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

GetHashCode()

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

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también