BuildProvider Klasa

Definicja

Definiuje zestaw właściwości i metod generowania kodu źródłowego w środowisku kompilacji ASP.NET. Ta klasa jest abstrakcyjna.

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
Dziedziczenie
BuildProvider
Pochodne

Przykłady

Poniższy przykład kodu ilustruje prostą implementację dostawcy kompilacji dziedziczą po abstrakcyjnej BuildProvider klasie bazowej. Dostawca kompilacji zastępuje CodeCompilerTypeelementy , GetGeneratedTypei GenerateCode elementy członkowskie klasy bazowej. Przykład nie zawiera implementacji SampleClassGenerator klasy . Aby uzyskać więcej informacji, zobacz CodeCompileUnit omówienie klasy.

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

Uwagi

Środowisko kompilacji ASP.NET używa BuildProvider obiektów do generowania kodu źródłowego dla różnych typów plików w aplikacji. Klasy pochodzące głównie z BuildProvider kodu źródłowego dla plików, stron sieci Web, zasobów i innych elementów niestandardowych.

Zazwyczaj wystąpienie klasy nie jest tworzone BuildProvider bezpośrednio. Zamiast tego należy zaimplementować klasę pochodzącą z BuildProviderklasy i skonfigurować implementację BuildProvider do użycia w środowisku kompilacji ASP.NET.

BuildProvider Wystąpienia klasy są używane z obiektami AssemblyBuilder do kompilowania jednego lub większej liczby plików w skompilowanym zestawie. Wystąpienie BuildProvider generuje kod źródłowy w odpowiednim języku dla poszczególnych plików, a AssemblyBuilder obiekt łączy źródło dodane przez każde BuildProvider wystąpienie w jeden zestaw.

Środowisko kompilacji ASP.NET używa wystąpień BuildProvider klasy do kompilowania plików w aplikacji. Właściwość VirtualPath BuildProvider klasy wskazuje ścieżkę pliku do skompilowania. Rozszerzenie pliku każdego pliku w aplikacji jest mapowane na odpowiedniego dostawcę kompilacji. Środowisko kompilacji ASP.NET inicjuje BuildProvider wystąpienie dla każdego pliku na podstawie rozszerzenia pliku i używa BuildProvider metod do generowania kodu źródłowego dla pliku. Środowisko kompilacji ASP.NET przekazuje AssemblyBuilder obiekt na podstawie preferowanego języka kompilatora i kontekstu pliku do BuildProvider metod podczas kompilowania zestawu z co najmniej jednego pliku, dzięki czemu BuildProvider wystąpienie może współtworzyć kod źródłowy dla jego pliku do ogólnego zestawu.

Aby zdefiniować niestandardowe akcje kompilacji dla typu pliku w aplikacji ASP.NET, należy utworzyć klasę z BuildProviderklasy , implementować składowe w klasie pochodnej do kompilowania typu pliku i skonfigurować dostawcę kompilacji dla odpowiedniego rozszerzenia pliku w pliku konfiguracji aplikacji.

Element add określa rozszerzenie pliku dla obsługiwanych plików i określa, czy dostawca kompilacji obsługuje pliki kodu, pliki sieci Web, pliki zasobów lub wszystkie pliki. Użyj atrybutu type , aby określić w pełni kwalifikowaną nazwę typu implementacji dostawcy kompilacji. BuildProviderAppliesToAttribute Użyj klasy , aby określić, czy dostawca kompilacji ma zastosowanie do plików w katalogu App_Code, do plików w katalogu zawartości sieci Web, do zasobów globalnych lub lokalnych, czy do wszystkich plików. Użyj atrybutu extension , aby określić rozszerzenie pliku używane do identyfikowania plików, które BuildProvider obsługuje klasa. BuildProviderCollection Użyj klasy , aby zbadać dostawców kompilacji w pliku konfiguracji. Aby uzyskać więcej informacji na temat konfigurowania dostawcy kompilacji, zobacz buildProviders, element do kompilacji (ASP.NET Ustawienia Schema).

Aby zaimplementować dostawcę kompilacji, który generuje kod źródłowy dla niestandardowego typu pliku, należy utworzyć klasę z BuildProviderklasy i zastąpić GenerateCode metodę generowania kodu źródłowego dla obsługiwanego typu pliku. Wygenerowane źródło jest dodawane do AssemblyBuilder obiektu w postaci grafu CodeDOM lub jako zawartości reprezentującej fizyczny plik kodu źródłowego. Jeśli dostawca kompilacji wymaga określonego języka programowania, przesłoń CodeCompilerType właściwość , aby zwrócić CompilerType obiekt dla obsługiwanego języka programowania. Jeśli dostawca kompilacji nie wymaga określonego języka programowania, nie przesłaniaj CodeCompilerType właściwości; użyj implementacji klasy bazowej, która wskazuje, że dostawca kompilacji może używać dowolnego języka .NET Framework, takiego jak Visual Basic lub C#.

Aby zaimplementować dostawcę kompilacji, który generuje kod źródłowy dla zawartości sieci Web, należy utworzyć klasę z BuildProvider klasy i zastąpić GetGeneratedType metodę , aby zwrócić Type klasę wygenerowaną przez BuildProvidermetodę . Zastąpij metodę w celu wygenerowania GenerateCode kodu źródłowego dla typu dostarczonego przez obsługiwany plik.

Uwaga

Dodanie dostosowanej BuildProvider klasy do pliku Web.config działa w witrynie sieci Web ASP.NET, ale nie działa w projekcie aplikacji internetowej ASP.NET. W projekcie aplikacji internetowej kod generowany przez BuildProvider klasę nie może być uwzględniony w aplikacji. Aby uzyskać więcej informacji, zobacz ASP.NET Web Application Project Precompilation Overview (Omówienie wstępnej kompilacji aplikacji internetowej ASP.NET).

Konstruktory

BuildProvider()

Inicjuje nowe wystąpienie klasy BuildProvider.

Właściwości

CodeCompilerType

Reprezentuje typ kompilatora używany przez dostawcę kompilacji do generowania kodu źródłowego dla niestandardowego typu pliku.

ReferencedAssemblies

Reprezentuje zestawy do skompilowania ze źródłem generowanym przez dostawcę kompilacji.

VirtualPath

Reprezentuje plik do skompilowania przez tę implementację dostawcy kompilacji.

VirtualPathDependencies

Reprezentuje kolekcję ścieżek wirtualnych, które należy skompilować przed wygenerowaniem kodu przez dostawcę kompilacji.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GenerateCode(AssemblyBuilder)

Generuje kod źródłowy dla ścieżki wirtualnej dostawcy kompilacji i dodaje kod źródłowy do określonego konstruktora zestawów.

GetCodeCompileUnit(IDictionary)

Reprezentuje kontener dla wygenerowanego grafu CodeDOM.

GetCustomString(CompilerResults)

Generuje ciąg do utrwalonego w skompilowanym zestawie.

GetDefaultCompilerType()

Zwraca ustawienia kompilatora dla języka domyślnego w aplikacji.

GetDefaultCompilerTypeForLanguage(String)

Zwraca ustawienia kompilatora dla dostawcy kompilacji na podstawie określonego języka.

GetGeneratedType(CompilerResults)

Zwraca typ wygenerowany przez dostawcę kompilacji ze ścieżki wirtualnej.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetResultFlags(CompilerResults)

Zwraca wartość wskazującą akcje wymagane podczas tworzenia ścieżki wirtualnej.

GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
OpenReader()

Otwiera czytnik tekstu do odczytu ze ścieżki wirtualnej bieżącego obiektu dostawcy kompilacji.

OpenReader(String)

Otwiera czytnik tekstu do odczytu z określonej ścieżki wirtualnej.

OpenStream()

Otwiera strumień odczytu ścieżki wirtualnej bieżącego obiektu dostawcy kompilacji.

OpenStream(String)

Otwiera strumień do odczytu z określonej ścieżki wirtualnej.

ProcessCompileErrors(CompilerResults)

Po zastąpieniu w klasie pochodnej umożliwia przeglądanie komunikatów o błędach kompilatora, dzięki czemu można je zmodyfikować w celu udostępnienia dodatkowych informacji.

RegisterBuildProvider(String, Type)

Rejestruje dostawcę kompilacji.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też