BuildProvider Klasse

Definition

Definiert Eigenschaften und Methoden zum Generieren von Quellcode in der ASP.NET-Buildumgebung. Diese Klasse ist abstrakt.

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
Vererbung
BuildProvider
Abgeleitet

Beispiele

Im folgenden Codebeispiel wird eine einfache Buildanbieterimplementierung veranschaulicht, die von der abstrakten BuildProvider Basisklasse erbt. Der Buildanbieter überschreibt die CodeCompilerTypeGetGeneratedTypeElemente der Basisklasse und GenerateCode die Mitglieder der Basisklasse. Das Beispiel enthält nicht die Implementierung der SampleClassGenerator Klasse. Weitere Informationen finden Sie in der CodeCompileUnit Klassenübersicht.

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

Hinweise

Die ASP.NET Buildumgebung verwendet BuildProvider Objekte, um Quellcode für verschiedene Dateitypen innerhalb einer Anwendung zu generieren. Von überwiegend abgeleiteten BuildProvider Klassen stellen Quellcode für Dateien, Webseiten, Ressourcen und andere benutzerdefinierte Elemente bereit.

Normalerweise erstellen Sie keine Instanz der BuildProvider Klasse direkt. Stattdessen implementieren Sie eine Klasse, die von BuildProvider, und konfigurieren Sie die Implementierung für die BuildProvider Verwendung in der ASP.NET Buildumgebung.

Instanzen der BuildProvider Klasse werden mit AssemblyBuilder Objekten verwendet, um eine oder mehrere Dateien in eine kompilierte Assembly zu erstellen. Eine BuildProvider Instanz generiert Quellcode in der entsprechenden Sprache für einzelne Dateien, und das AssemblyBuilder Objekt kombiniert die Quelle, die von jeder BuildProvider Instanz in eine einzelne Assembly beigetragen hat.

Die ASP.NET Buildumgebung verwendet Instanzen der BuildProvider Klasse zum Erstellen von Dateien in einer Anwendung. Die VirtualPath Eigenschaft der BuildProvider Klasse gibt den Pfad der zu erstellenden Datei an. Die Dateierweiterung jeder Datei innerhalb einer Anwendung wird einem entsprechenden Buildanbieter zugeordnet. Die ASP.NET Buildumgebung initialisiert eine BuildProvider Instanz für jede Datei basierend auf der Dateierweiterung und verwendet die Methoden zum Generieren von Quellcode für die BuildProvider Datei. Die ASP.NET Buildumgebung übergibt ein AssemblyBuilder Objekt basierend auf der bevorzugten Compilersprache und dem Kontext der Datei an die BuildProvider Methoden beim Erstellen einer Assembly aus einer oder mehreren Dateien, sodass die BuildProvider Instanz Quellcode für seine Datei zur Gesamtassembly beitragen kann.

Um benutzerdefinierte Buildaktionen für einen Dateityp in einer ASP.NET-Anwendung zu definieren, müssen Sie eine Klasse ableiten BuildProvider, Elemente innerhalb der abgeleiteten Klasse zum Erstellen des Dateityps implementieren und den Buildanbieter für die entsprechende Dateierweiterung innerhalb der Anwendungskonfigurationsdatei konfigurieren.

Das add Element gibt die Dateierweiterung für unterstützte Dateien an und ob der Buildanbieter Codedateien, Webdateien, Ressourcendateien oder alle Dateien unterstützt. Verwenden Sie das type Attribut, um den vollqualifizierten Typnamen der Buildanbieterimplementierung anzugeben. Verwenden Sie die BuildProviderAppliesToAttribute Klasse, um anzugeben, ob der Buildanbieter auf Dateien im App_Code-Verzeichnis, auf Dateien in einem Webinhaltsverzeichnis, auf globale oder lokale Ressourcen oder auf alle Dateien angewendet wird. Verwenden Sie das extension Attribut, um die Dateierweiterung anzugeben, die verwendet wird, um Dateien zu identifizieren, die die BuildProvider Klasse unterstützt. Verwenden Sie die BuildProviderCollection Klasse, um Buildanbieter in einer Konfigurationsdatei zu untersuchen. Weitere Informationen zum Konfigurieren eines Buildanbieters finden Sie unter BuildProviders Element für die Kompilierung (ASP.NET Einstellungen Schema).

Um einen Buildanbieter zu implementieren, der Quellcode für einen benutzerdefinierten Dateityp generiert, wird eine Klasse abgeleitet BuildProviderund die GenerateCode Methode außer Kraft setzen, um Quellcode für den unterstützten Dateityp zu generieren. Die generierte Quelle wird AssemblyBuilder dem Objekt in Form eines CodeDOM-Diagramms oder als Inhalt hinzugefügt, der eine physische Quellcodedatei darstellt. Wenn der Buildanbieter eine bestimmte Programmiersprache erfordert, überschreiben Sie die CodeCompilerType Eigenschaft, um ein CompilerType Objekt für die unterstützte Programmiersprache zurückzugeben. Wenn der Buildanbieter keine bestimmte Programmiersprache erfordert, überschreiben CodeCompilerType Sie die Eigenschaft nicht. Verwenden Sie die Basisklassenimplementierung, die angibt, dass der Buildanbieter eine beliebige .NET Framework Sprache verwenden kann, z. B. Visual Basic oder C#.

Um einen Buildanbieter zu implementieren, der Quellcode für Webinhalte generiert, wird eine Klasse abgeleitet BuildProvider und die Methode außer Kraft setzen, um die Type GetGeneratedType von der Klasse generierte BuildProviderKlasse zurückzugeben. Überschreiben Sie die GenerateCode Methode, um Quellcode für den vom unterstützten Datei bereitgestellten Typ zu generieren.

Hinweis

Das Hinzufügen einer angepassten BuildProvider Klasse zur Web.config-Datei funktioniert auf einer ASP.NET-Website, funktioniert jedoch nicht in einem ASP.NET Webanwendungsprojekt. In einem Webanwendungsprojekt kann der von der Klasse generierte Code nicht in die BuildProvider Anwendung einbezogen werden. Weitere Informationen finden Sie unter ASP.NET Webanwendung Project Übersicht über die Vorabkompilierung.

Konstruktoren

BuildProvider()

Initialisiert eine neue Instanz der BuildProvider-Klasse.

Eigenschaften

CodeCompilerType

Stellt den Compilertyp dar, der vom Buildanbieter zum Generieren von Quellcode für einen benutzerdefinierten Dateityp verwendet wird.

ReferencedAssemblies

Stellt die Assemblys dar, die mit dem vom Buildanbieter generierten Quellcode kompiliert werden müssen.

VirtualPath

Stellt die von dieser Buildanbieterimplementierung zu erstellende Datei dar.

VirtualPathDependencies

Stellt eine Auflistung von virtuellen Pfaden dar, die erstellt werden muss, bevor der Buildanbieter Code generiert.

Methoden

Equals(Object)

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

(Geerbt von Object)
GenerateCode(AssemblyBuilder)

Generiert Quellcode für den virtuellen Pfad des Buildanbieters und fügt den Quellcode einem bestimmten Assembly-Generator hinzu.

GetCodeCompileUnit(IDictionary)

Stellt den Container für das generierte CodeDOM-Diagramm dar.

GetCustomString(CompilerResults)

Generiert eine Zeichenfolge, die in der kompilierten Assembly beibehalten werden muss.

GetDefaultCompilerType()

Gibt die Compilereinstellungen für die Standardsprache in der Anwendung zurück.

GetDefaultCompilerTypeForLanguage(String)

Gibt die Compilereinstellungen für den Buildanbieter auf der Grundlage der angegebenen Sprache zurück.

GetGeneratedType(CompilerResults)

Gibt einen vom Buildanbieter generierten Typ vom virtuellen Pfad zurück.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetResultFlags(CompilerResults)

Gibt einen Wert zurück, der Aktionen angibt, die erforderlich sind, wenn ein virtueller Pfad erstellt wird.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
OpenReader()

Öffnet einen Textreader zum Lesen aus dem virtuellen Pfad des aktuellen Buildanbieterobjekts.

OpenReader(String)

Öffnet einen Textreader zum Lesen aus einem bestimmten virtuellen Pfad.

OpenStream()

Öffnet einen Stream zum Lesen des virtuellen Pfads des aktuellen Buildanbieterobjekts.

OpenStream(String)

Öffnet einen Stream zum Lesen aus einem angegebenen virtuellen Pfad.

ProcessCompileErrors(CompilerResults)

Beim Überschreiben in einer abgeleiteten Klasse können Sie Compilerfehlermeldungen überprüfen, damit Sie sie ändern können, um weitere Informationen bereitzustellen.

RegisterBuildProvider(String, Type)

Registriert einen Buildanbieter.

ToString()

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

(Geerbt von Object)

Gilt für

Siehe auch