Freigeben über


AssemblyBuilder Klasse

Definition

Stellt einen Container zum Erstellen einer Assembly aus einem oder mehreren virtuellen Pfaden in einem ASP.NET-Projekt bereit.

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

Beispiele

Im folgenden Codebeispiel wird eine einfache Buildanbieterimplementierung veranschaulicht, die von der abstrakten BuildProvider Basisklasse erbt. Der Buildanbieter überschreibt die CodeCompilerTypeElemente GetGeneratedTypeund GenerateCode Member der Basisklasse.

In der GenerateCode Methodenimplementierung fügt der Buildanbieter den generierten Code für die Assemblykompilierung mithilfe der CreateCodeFile Methode hinzu. Das Beispiel enthält nicht die Implementierung der SampleClassGenerator Klasse. Weitere Informationen finden Sie unter 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

Hinweise

Instanzen der AssemblyBuilder Klasse werden mit BuildProvider Klassenmethoden verwendet, um eine oder mehrere Dateien in eine kompilierte Assembly zu erstellen.

Die BuildProvider Klasse definiert Buildfunktionen für einzelne Dateien, und die AssemblyBuilder Klasse kombiniert den Quellcode, der von jeder BuildProvider Instanz in eine einzelne Assembly beigetragen hat. Die ASP.NET Buildumgebung übergibt beim Erstellen einer Assembly aus einer oder mehreren Dateien ein AssemblyBuilder Objekt an die BuildProvider Methoden, sodass jede BuildProvider Instanz Quellcode für seine Datei zur Gesamtassembly beitragen kann.

Die ASP.NET Buildumgebung bestimmt die Sprache und den Compiler, die für Dateien innerhalb des Projekts erforderlich sind, basierend auf der BuildProvider.CodeCompilerType Eigenschaft. Die Buildumgebung gruppiert Dateien basierend auf ihren Compilereinstellungen und erstellt eine Assembly aus Dateien, die denselben Compiler erfordern.

Die CodeDomProvider Eigenschaft gibt die CodeDomProvider Implementierung an, die die ASP.NET Buildumgebung verwendet, um eine Assembly aus dem Quellcode zu kompilieren, der von jeder BuildProvider Implementierung beigetragen hat.

Ein BuildProvider Objekt trägt Quellcode in Form eines CodeDOM-Diagramms mithilfe der AddCodeCompileUnit Methode bei. Ein BuildProvider Objekt trägt den Quellcode bei, der in einer physischen Datei mithilfe der CreateCodeFile Methode gespeichert ist.

Nachdem jedes BuildProvider Objekt mit den entsprechenden AssemblyBuilder Methoden Quellcode beiträgt, verwendet die ASP.NET Buildumgebung die Klasse, um den AssemblyBuilder gesammelten Quellcode in eine Assembly zu kompilieren.

Eigenschaften

CodeDomProvider

Ruft den Compiler auf, der zum Erstellen von Quellcode in einer Assembly verwendet wird.

Methoden

AddAssemblyReference(Assembly)

Fügt eine Assembly hinzu, auf die für eine Datei generierter Quellcode verweist.

AddCodeCompileUnit(BuildProvider, CodeCompileUnit)

Fügt der Assembly Quellcode in Form eines CodeDOM-Diagramms hinzu.

CreateCodeFile(BuildProvider)

Ermöglicht es einem Buildanbieter, eine temporäre Quelldatei zu erstellen und die Quelldatei in die Assemblykompilierung einzubeziehen.

CreateEmbeddedResource(BuildProvider, String)

Ermöglicht es einem Buildanbieter, eine Ressourcendatei zu erstellen und in die Assemblykompilierung einzubeziehen.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GenerateTypeFactory(String)

Fügt eine schnelle Objektfactoryvorlage für einen Typ in die kompilierte Assembly ein.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetTempFilePhysicalPath(String)

Generiert einen Pfad für eine temporäre Datei.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für

Siehe auch