Condividi tramite


AssemblyBuilder Classe

Definizione

Rende disponibile un contenitore per compilare un assembly da uno o più percorsi virtuali in un progetto ASP.NET.

public ref class AssemblyBuilder
public class AssemblyBuilder
type AssemblyBuilder = class
Public Class AssemblyBuilder
Ereditarietà
AssemblyBuilder

Esempio

Nell'esempio di codice seguente viene illustrata una semplice implementazione del provider di compilazione, che eredita dalla classe base astratta BuildProvider . Il provider di compilazione esegue l'override dei CodeCompilerTypemembri , GetGeneratedTypee GenerateCode della classe base.

Nell'implementazione del GenerateCode metodo il provider di compilazione aggiunge il codice generato per la compilazione dell'assembly usando il CreateCodeFile metodo . L'esempio non include l'implementazione della SampleClassGenerator classe . Per altre informazioni, vedere 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

Commenti

Le istanze della classe vengono usate con BuildProvider i metodi di AssemblyBuilder classe per compilare uno o più file in un assembly compilato.

La BuildProvider classe definisce la funzionalità di compilazione per singoli file e la AssemblyBuilder classe combina il codice sorgente fornito da ogni BuildProvider istanza in un singolo assembly. L'ambiente di compilazione ASP.NET passa un AssemblyBuilder oggetto ai metodi durante la BuildProvider compilazione di un assembly da uno o più file, in modo che ogni BuildProvider istanza possa contribuire al codice sorgente per il relativo file nell'assembly complessivo.

L'ambiente di compilazione ASP.NET determina il linguaggio e il compilatore richiesti dai file all'interno del progetto, in base alla BuildProvider.CodeCompilerType proprietà . L'ambiente di compilazione raggruppa i file in base alle impostazioni del compilatore e compila un assembly da file che richiedono lo stesso compilatore.

La CodeDomProvider proprietà indica l'implementazione usata dall'ambiente CodeDomProvider di compilazione ASP.NET per compilare un assembly dal codice sorgente fornito da ogni BuildProvider implementazione.

Un BuildProvider oggetto contribuisce al codice sorgente sotto forma di grafico CodeDOM usando il AddCodeCompileUnit metodo . Un BuildProvider oggetto contribuisce al codice sorgente archiviato in un file fisico usando il CreateCodeFile metodo .

Dopo che ogni BuildProvider oggetto contribuisce al codice sorgente usando i metodi appropriatiAssemblyBuilder, l'ambiente di compilazione ASP.NET usa la AssemblyBuilder classe per compilare il codice sorgente raccolto in un assembly.

Proprietà

CodeDomProvider

Ottiene il compilatore utilizzato per compilare codice sorgente in un assembly.

Metodi

AddAssemblyReference(Assembly)

Aggiunge un assembly a cui fa riferimento il codice sorgente generato per un file.

AddCodeCompileUnit(BuildProvider, CodeCompileUnit)

Aggiunge codice sorgente per l'assembly sotto forma di grafico CodeDOM.

CreateCodeFile(BuildProvider)

Consente a un provider di compilazione di creare un file di origine temporaneo e di includere il file di origine nella compilazione dell'assembly.

CreateEmbeddedResource(BuildProvider, String)

Consente a un provider di compilazione di creare un file di risorse da includere nella compilazione dell'assembly.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GenerateTypeFactory(String)

Inserisce un modello di factory di oggetto veloce per un tipo nell'assembly compilato.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetTempFilePhysicalPath(String)

Genera un percorso di file temporaneo.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche