Condividi tramite


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

Nell'esempio di codice seguente viene illustrata un'implementazione semplice del provider di compilazione, che eredita dalla classe di base astratta BuildProvider . Il provider di compilazione esegue l'override dei CodeCompilerTypemembri , GetGeneratedTypee GenerateCode della classe di base. L'esempio non include l'implementazione della SampleClassGenerator classe . Per altre informazioni, vedere la 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 per l'uso BuildProvider all'interno dell'ambiente 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 nella lingua appropriata per singoli file e l'oggetto AssemblyBuilder combina l'origine fornita 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 di 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 di per ogni file in base all'estensione di file e usa i BuildProvider metodi per generare il codice sorgente per il file. L'ambiente di compilazione ASP.NET passa un AssemblyBuilder oggetto in base al linguaggio del compilatore preferito e al contesto del file ai BuildProvider metodi durante la compilazione di un 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 compilare il tipo di file e configurare il provider di compilazione per l'estensione di file corrispondente all'interno del file di configurazione dell'applicazione.

L'elemento add specifica l'estensione di 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 type per specificare il nome completo del tipo dell'implementazione del provider di compilazione. Usare la BuildProviderAppliesToAttribute classe per specificare se il provider di compilazione si applica ai file nella directory App_Code, ai file in una directory del contenuto Web, alle risorse globali o locali o a tutti i file. Usare l'attributo extension per specificare l'estensione di 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 (schema delle impostazioni ASP.NET).For more information about configuring a build provider, see buildProviders Element for compilation (ASP.NET Settings Schema).

Per implementare un provider di compilazione che genera codice sorgente per un tipo di file personalizzato, derivare una classe da BuildProvidered eseguire l'override del metodo per generare il GenerateCode codice sorgente per il tipo di file supportato. L'origine generata viene aggiunta all'oggetto AssemblyBuilder sotto forma di grafo 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 ed eseguire l'override del GetGeneratedType metodo per restituire per Type la classe generata da BuildProvider. Eseguire l'override del GenerateCode metodo per generare il codice sorgente per il tipo fornito dal file supportato.

Annotazioni

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

Costruttori

Nome Descrizione
BuildProvider()

Inizializza una nuova istanza della classe BuildProvider.

Proprietà

Nome Descrizione
CodeCompilerType

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

ReferencedAssemblies

Rappresenta gli assembly da compilare con l'origine generata dal provider di compilazione.

VirtualPath

Rappresenta il file da compilare da questa implementazione del provider di compilazione.

VirtualPathDependencies

Rappresenta una raccolta di percorsi virtuali che devono essere compilati prima che il provider di compilazione generi codice.

Metodi

Nome Descrizione
Equals(Object)

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

(Ereditato da Object)
GenerateCode(AssemblyBuilder)

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

GetCodeCompileUnit(IDictionary)

Rappresenta il contenitore per il grafico CodeDOM generato.

GetCustomString(CompilerResults)

Genera una stringa da rendere 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 compilato un percorso virtuale.

GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
OpenReader()

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

OpenReader(String)

Apre un lettore di testo per la lettura da un percorso virtuale specificato.

OpenStream()

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

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 esaminare i messaggi di errore del compilatore in modo da poterli modificare per fornire altre 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