BuildProvider Classe

Definizione

Definisce un set di proprietà e metodi per la generazione di codice sorgente all'interno dell'ambiente di compilazione ASP.NET. Questa classe è astratta.

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
Ereditarietà
BuildProvider
Derivato

Esempio

L'esempio di codice seguente illustra un'implementazione semplice del provider di compilazione, ereditando dalla classe base astratta BuildProvider . Il provider di compilazione esegue l'override di CodeCompilerType, GetGeneratedTypee GenerateCode i membri della classe base. L'esempio non include l'implementazione della SampleClassGenerator classe. Per altre informazioni, vedere panoramica della CodeCompileUnit classe.

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

Commenti

L'ambiente di compilazione ASP.NET usa BuildProvider oggetti per generare codice sorgente per tipi di file diversi all'interno di un'applicazione. Le classi derivate da BuildProvider forniscono principalmente codice sorgente per file, pagine Web, risorse e altri elementi personalizzati.

In genere, non si crea direttamente un'istanza della BuildProvider classe. Si implementa invece una classe che deriva da BuildProvidere si configura l'implementazione da usare all'interno dell'ambiente BuildProvider di compilazione ASP.NET.

Le istanze della BuildProvider classe vengono usate con AssemblyBuilder oggetti per compilare uno o più file in un assembly compilato. Un'istanza BuildProvider genera codice sorgente nel linguaggio appropriato per singoli file e l'oggetto AssemblyBuilder combina l'origine apportata da ogni BuildProvider istanza in un singolo assembly.

L'ambiente di compilazione ASP.NET usa istanze della BuildProvider classe per compilare file all'interno di un'applicazione. La VirtualPath proprietà della BuildProvider classe indica il percorso del file da compilare. L'estensione file di ogni file all'interno di un'applicazione viene mappata a un provider di compilazione corrispondente. L'ambiente di compilazione ASP.NET inizializza un'istanza BuildProvider per ogni file in base all'estensione del file e usa i BuildProvider metodi per generare il codice sorgente per il file. L'ambiente di compilazione ASP.NET passa un oggetto in base al linguaggio del compilatore preferito e al contesto del file ai BuildProvider metodi durante la compilazione di un AssemblyBuilder assembly da uno o più file, in modo che l'istanza BuildProvider possa contribuire al codice sorgente per il relativo file nell'assembly complessivo.

Per definire azioni di compilazione personalizzate per un tipo di file all'interno di un'applicazione ASP.NET, è necessario derivare una classe da BuildProvider, implementare i membri all'interno della classe derivata per la compilazione del tipo di file e configurare il provider di compilazione per l'estensione file corrispondente all'interno del file di configurazione dell'applicazione.

L'elemento add specifica l'estensione file per i file supportati e se il provider di compilazione supporta file di codice, file Web, file di risorse o tutti i file. Usare l'attributo per specificare il type nome completo del tipo dell'implementazione del provider di compilazione. Utilizzare la BuildProviderAppliesToAttribute classe per specificare se il provider di compilazione si applica ai file nella directory App_Code, ai file in una directory contenuto Web, alle risorse globali o locali o a tutti i file. Usare l'attributo per specificare l'estensione extension del file usata per identificare i file supportati dalla BuildProvider classe. Usare la BuildProviderCollection classe per esaminare i provider di compilazione in un file di configurazione. Per altre informazioni sulla configurazione di un provider di compilazione, vedere Elemento buildProviders per la compilazione (ASP.NET Schema impostazioni).

Per implementare un provider di compilazione che genera codice sorgente per un tipo di file personalizzato, derivare una classe da BuildProvidere eseguire l'override del GenerateCode metodo per generare il codice sorgente per il tipo di file supportato. L'origine generata viene aggiunta all'oggetto AssemblyBuilder sotto forma di grafico CodeDOM o come contenuto che rappresenta un file di codice sorgente fisico. Se il provider di compilazione richiede un linguaggio di programmazione specifico, eseguire l'override della CodeCompilerType proprietà per restituire un CompilerType oggetto per il linguaggio di programmazione supportato. Se il provider di compilazione non richiede un linguaggio di programmazione specifico, non eseguire l'override della CodeCompilerType proprietà; usare l'implementazione della classe di base, che indica che il provider di compilazione può usare qualsiasi linguaggio .NET Framework, ad esempio Visual Basic o C#.

Per implementare un provider di compilazione che genera codice sorgente per il contenuto Web, derivare una classe da BuildProvider e eseguire l'override del GetGeneratedType metodo per restituire la Type classe generata da BuildProvider. Eseguire l'override del GenerateCode metodo per generare il codice sorgente per il tipo fornito dal file supportato.

Nota

L'aggiunta di una classe personalizzata BuildProvider al file Web.config funziona in un sito Web ASP.NET, ma non funziona in un progetto di applicazione Web ASP.NET. In un progetto applicazione Web il codice generato dalla BuildProvider classe non può essere incluso nell'applicazione. Per altre informazioni, vedere Panoramica della precompilazione del progetto applicazione Web ASP.NET.

Costruttori

BuildProvider()

Inizializza una nuova istanza della classe BuildProvider.

Proprietà

CodeCompilerType

Rappresenta il tipo di compilatore utilizzato da un provider di compilazione per la generazione di codice sorgente per un tipo di file personalizzato.

ReferencedAssemblies

Rappresenta gli assembly da compilare con il codice sorgente generato dal provider di compilazione.

VirtualPath

Rappresenta il file che deve essere compilato da questa implementazione del provider di compilazione.

VirtualPathDependencies

Rappresenta una raccolta di percorsi virtuali da compilare prima della generazione del codice da parte del provider di compilazione.

Metodi

Equals(Object)

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

(Ereditato da Object)
GenerateCode(AssemblyBuilder)

Genera codice sorgente per il percorso virtuale del provider di compilazione e aggiunge tale codice al generatore di assembly specificato.

GetCodeCompileUnit(IDictionary)

Rappresenta il contenitore per il grafico CodeDOM generato.

GetCustomString(CompilerResults)

Genera una stringa che deve essere resa persistente nell'assembly compilato.

GetDefaultCompilerType()

Restituisce le impostazioni del compilatore per il linguaggio predefinito nell'applicazione.

GetDefaultCompilerTypeForLanguage(String)

Restituisce le impostazioni del compilatore per il provider di compilazione in base al linguaggio specificato.

GetGeneratedType(CompilerResults)

Restituisce un tipo generato dal provider di compilazione dal percorso virtuale.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetResultFlags(CompilerResults)

Restituisce un valore che indica le azioni necessarie quando viene generato un percorso virtuale.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
OpenReader()

Apre un visualizzatore di testo per la lettura dal percorso virtuale dell'oggetto corrente del provider di compilazione.

OpenReader(String)

Apre un visualizzatore di testo per la lettura dal percorso virtuale specificato.

OpenStream()

Apre un flusso per la lettura del percorso virtuale dell'oggetto corrente del provider di compilazione.

OpenStream(String)

Apre un flusso per la lettura da un percorso virtuale specificato.

ProcessCompileErrors(CompilerResults)

Quando è sottoposto a override in una classe derivata, consente di rivedere i messaggi di errore del compilatore in modo da poterli modificarli per fornire ulteriori informazioni.

RegisterBuildProvider(String, Type)

Registra un provider di compilazione.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche