Partager via


BuildProvider Classe

Définition

Définit un jeu de propriétés et de méthodes pour la génération de code source dans l'environnement de génération ASP.NET. Cette classe est abstraite.

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
Héritage
BuildProvider
Dérivé

Exemples

L’exemple de code suivant illustre une implémentation de fournisseur de build simple, héritée de la classe de base abstraite BuildProvider . Le fournisseur de build remplace le CodeCompilerType, GetGeneratedTypeet GenerateCode les membres de la classe de base. L’exemple n’inclut pas l’implémentation de la SampleClassGenerator classe. Pour plus d’informations, consultez la vue d’ensemble de la 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

Remarques

L’environnement de génération ASP.NET utilise des BuildProvider objets pour générer du code source pour différents types de fichiers au sein d’une application. Les classes dérivées de fournir principalement du BuildProvider code source pour les fichiers, les pages Web, les ressources et d’autres éléments personnalisés.

En règle générale, vous ne créez pas d’instance de la BuildProvider classe directement. Au lieu de BuildProvidercela, vous implémentez une classe qui dérive de , et configurez l’implémentation BuildProvider à utiliser dans l’environnement de build ASP.NET.

Les instances de la BuildProvider classe sont utilisées avec des AssemblyBuilder objets pour générer un ou plusieurs fichiers dans un assembly compilé. Une BuildProvider instance génère du code source dans le langage approprié pour les fichiers individuels, et l’objet AssemblyBuilder combine la source contribuée par chaque BuildProvider instance dans un seul assembly.

L’environnement de build ASP.NET utilise des instances de la BuildProvider classe pour générer des fichiers au sein d’une application. La VirtualPath propriété de la BuildProvider classe indique le chemin d’accès du fichier à générer. L’extension de fichier de chaque fichier au sein d’une application est mappée à un fournisseur de build correspondant. L’environnement de génération ASP.NET initialise une BuildProvider instance pour chaque fichier en fonction de l’extension de fichier et utilise les méthodes pour générer du BuildProvider code source pour le fichier. L’environnement de build ASP.NET transmet un AssemblyBuilder objet basé sur le langage du compilateur préféré et le contexte du fichier aux BuildProvider méthodes lors de la génération d’un assembly à partir d’un ou plusieurs fichiers, afin que l’instance BuildProvider puisse contribuer au code source de son fichier à l’assembly global.

Pour définir des actions de build personnalisées pour un type de fichier au sein d’une application ASP.NET, vous devez dériver une classe de BuildProvider, implémenter des membres dans la classe dérivée pour générer le type de fichier et configurer le fournisseur de build pour l’extension de fichier correspondante dans le fichier de configuration de l’application.

L’élément add spécifie l’extension de fichier pour les fichiers pris en charge et indique si le fournisseur de build prend en charge les fichiers de code, les fichiers Web, les fichiers de ressources ou tous les fichiers. Utilisez l’attribut type pour spécifier le nom de type complet de l’implémentation du fournisseur de build. Utilisez la BuildProviderAppliesToAttribute classe pour spécifier si le fournisseur de build s’applique aux fichiers du répertoire App_Code, aux fichiers d’un répertoire de contenu Web, aux ressources globales ou locales, ou à tous les fichiers. Utilisez l’attribut pour spécifier l’extension extension de fichier utilisée pour identifier les fichiers pris en charge par la BuildProvider classe. Utilisez la BuildProviderCollection classe pour examiner les fournisseurs de build dans un fichier de configuration. Pour plus d’informations sur la configuration d’un fournisseur de build, consultez buildProviders, élément pour la compilation (ASP.NET Paramètres Schéma).

Pour implémenter un fournisseur de build qui génère du code source pour un type de fichier personnalisé, dérivez une classe de et remplacez la méthode pour générer du GenerateCode code source pour le type de BuildProviderfichier pris en charge. La source générée est ajoutée à l’objet AssemblyBuilder sous la forme d’un graphique CodeDOM ou en tant que contenu qui représente un fichier de code source physique. Si le fournisseur de build requiert un langage de programmation spécifique, remplacez la CodeCompilerType propriété pour renvoyer un CompilerType objet pour le langage de programmation pris en charge. Si le fournisseur de build ne nécessite pas de langage de programmation spécifique, ne remplacez pas la CodeCompilerType propriété ; utilisez l’implémentation de classe de base, ce qui indique que le fournisseur de build peut utiliser n’importe quel langage .NET Framework, tel que Visual Basic ou C#.

Pour implémenter un fournisseur de build qui génère du code source pour le contenu Web, dérivez une classe et remplacez la GetGeneratedType méthode pour retourner la Type classe générée par BuildProvider.BuildProvider Remplacez la méthode pour générer du GenerateCode code source pour le type fourni par le fichier pris en charge.

Notes

L’ajout d’une classe personnalisée BuildProvider au fichier Web.config fonctionne dans un site web ASP.NET, mais ne fonctionne pas dans un projet d’application web ASP.NET. Dans un projet d’application web, le code généré par la BuildProvider classe ne peut pas être inclus dans l’application. Pour plus d’informations, consultez ASP.NET Vue d’ensemble de la précompilation Project application web.

Constructeurs

BuildProvider()

Initialise une nouvelle instance de la classe BuildProvider.

Propriétés

CodeCompilerType

Représente le type de compilateur utilisé par un fournisseur de générations pour générer le code source pour un type de fichier personnalisé.

ReferencedAssemblies

Représente les assemblys à compiler avec la source générée par le fournisseur de générations.

VirtualPath

Représente le fichier à générer par cette implémentation de fournisseur de générations.

VirtualPathDependencies

Représente une collection de chemins d'accès virtuel qui doivent être générés avant que le fournisseur de générations ne puisse générer le code.

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GenerateCode(AssemblyBuilder)

Génère le code source du chemin d'accès virtuel du fournisseur de générations et l'ajoute à un générateur d'assemblys spécifié.

GetCodeCompileUnit(IDictionary)

Représente le conteneur du graphique CodeDOM généré.

GetCustomString(CompilerResults)

Génère une chaîne à rendre persistante dans l'assembly compilé.

GetDefaultCompilerType()

Retourne les paramètres de compilateur pour le langage par défaut dans l'application.

GetDefaultCompilerTypeForLanguage(String)

Retourne les paramètres de compilateur pour le fournisseur de générations selon le langage spécifié.

GetGeneratedType(CompilerResults)

Retourne un type généré par le fournisseur de générations à partir du chemin d’accès virtuel.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetResultFlags(CompilerResults)

Retourne une valeur indiquant les actions requises lors de la création d'un chemin d'accès virtuel.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
OpenReader()

Ouvre un lecteur de texte pour lire le contenu du chemin d'accès virtuel de l'objet fournisseur de générations actuel.

OpenReader(String)

Ouvre un lecteur de texte pour lire le contenu d'un chemin d'accès virtuel spécifié.

OpenStream()

Ouvre un flux pour lire le chemin d'accès virtuel de l'objet fournisseur de générations actuel.

OpenStream(String)

Ouvre un flux pour lire le contenu d'un chemin d'accès virtuel spécifié.

ProcessCompileErrors(CompilerResults)

En cas de substitution dans une classe dérivée, permet d'examiner des messages d'erreur du compilateur afin que vous puissiez les modifier pour fournir plus d'informations.

RegisterBuildProvider(String, Type)

Inscrit un fournisseur de générations.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à

Voir aussi