Compartilhar via


BuildProvider Classe

Definição

Define um conjunto de propriedades e métodos para a geração de código-fonte dentro do ambiente de build do ASP.NET. Esta classe é abstrata.

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
Herança
BuildProvider
Derivado

Exemplos

O exemplo de código a seguir ilustra uma implementação simples do provedor de build, herdando da classe base abstrata BuildProvider . O provedor de build substitui os CodeCompilerTypemembros e GenerateCode membros GetGeneratedTypeda classe base. O exemplo não inclui a implementação da SampleClassGenerator classe. Para obter mais informações, consulte a visão geral da 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

Comentários

O ambiente de build ASP.NET usa BuildProvider objetos para gerar código-fonte para diferentes tipos de arquivo em um aplicativo. Classes derivadas de BuildProvider código-fonte predominantemente fornecem código-fonte para arquivos, páginas da Web, recursos e outros itens personalizados.

Normalmente, você não cria uma instância da BuildProvider classe diretamente. Em vez disso, você implementa uma classe derivada BuildProviderde e configura a BuildProvider implementação para uso dentro do ambiente de build ASP.NET.

As instâncias da BuildProvider classe são usadas com AssemblyBuilder objetos para criar um ou mais arquivos em um assembly compilado. Uma BuildProvider instância gera o código-fonte no idioma apropriado para arquivos individuais e o AssemblyBuilder objeto combina a origem contribuída por cada BuildProvider instância em um único assembly.

O ambiente de build ASP.NET usa instâncias da BuildProvider classe para criar arquivos em um aplicativo. A VirtualPath propriedade da BuildProvider classe indica o caminho do arquivo a ser criado. A extensão de arquivo de cada arquivo dentro de um aplicativo é mapeada para um provedor de build correspondente. O ambiente de build ASP.NET inicializa uma BuildProvider instância para cada arquivo com base na extensão de arquivo e usa os BuildProvider métodos para gerar código-fonte para o arquivo. O ambiente de build ASP.NET passa um AssemblyBuilder objeto com base na linguagem preferencial do compilador e no contexto do arquivo para os BuildProvider métodos ao criar um assembly de um ou mais arquivos, para que a instância possa contribuir com o BuildProvider código-fonte para seu arquivo para o assembly geral.

Para definir ações de build personalizadas para um tipo de arquivo em um aplicativo ASP.NET, você deve derivar uma classe, BuildProviderimplementar membros dentro da classe derivada para criar o tipo de arquivo e configurar o provedor de build para a extensão de arquivo correspondente dentro do arquivo de configuração do aplicativo.

O add elemento especifica a extensão de arquivo para arquivos com suporte e se o provedor de build dá suporte a arquivos de código, arquivos Web, arquivos de recurso ou todos os arquivos. Use o type atributo para especificar o nome de tipo totalmente qualificado da implementação do provedor de build. Use a BuildProviderAppliesToAttribute classe para especificar se o provedor de build se aplica a arquivos no diretório App_Code, a arquivos em um diretório de conteúdo da Web, a recursos globais ou locais ou a todos os arquivos. Use o extension atributo para especificar a extensão de arquivo usada para identificar arquivos compatíveis com a BuildProvider classe. Use a BuildProviderCollection classe para examinar provedores de build em um arquivo de configuração. Para obter mais informações sobre como configurar um provedor de build, consulte o elemento buildProviders para compilação (ASP.NET Configurações Esquema).

Para implementar um provedor de build que gere código-fonte para um tipo de arquivo personalizado, derive uma classe e substitua o GenerateCode método para gerar código-fonte para o tipo de BuildProviderarquivo com suporte. A fonte gerada é adicionada ao AssemblyBuilder objeto na forma de um grafo CodeDOM ou como conteúdo que representa um arquivo de código-fonte físico. Se o provedor de build exigir uma linguagem de programação específica, substitua a CodeCompilerType propriedade para retornar um CompilerType objeto para a linguagem de programação com suporte. Se o provedor de build não exigir uma linguagem de programação específica, não substitua a CodeCompilerType propriedade; use a implementação de classe base, o que indica que o provedor de build pode usar qualquer idioma .NET Framework, como Visual Basic ou C#.

Para implementar um provedor de build que gera código-fonte para conteúdo da Web, derive uma classe BuildProvider e substitua o GetGeneratedType método para retornar a Type classe gerada por BuildProvider. Substitua o GenerateCode método para gerar o código-fonte para o tipo fornecido pelo arquivo com suporte.

Observação

Adicionar uma classe personalizada BuildProvider ao arquivo Web.config funciona em um site ASP.NET, mas não funciona em um projeto de aplicativo Web ASP.NET. Em um projeto de aplicativo Web, o código gerado pela BuildProvider classe não pode ser incluído no aplicativo. Para obter mais informações, consulte ASP.NET Visão geral de pré-configuração do aplicativo Web Project.

Construtores

BuildProvider()

Inicializa uma nova instância da classe BuildProvider.

Propriedades

CodeCompilerType

Representa o tipo de compilador usado por um provedor de build para gerar o código-fonte para um tipo de arquivo personalizado.

ReferencedAssemblies

Representa os assemblies a serem compilados com a origem gerada pelo provedor de build.

VirtualPath

Representa o arquivo a ser criado por esta implementação de provedor de build.

VirtualPathDependencies

Representa uma coleção de caminhos virtuais que devem ser compilados antes de o provedor de build gerar o código.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GenerateCode(AssemblyBuilder)

Gera o código-fonte para o caminho virtual do provedor de build e adiciona o código-fonte a um construtor de assembly especificado.

GetCodeCompileUnit(IDictionary)

Representa o contêiner para o gráfico de CodeDOM gerado.

GetCustomString(CompilerResults)

Gera uma cadeia de caracteres a ser mantida no assembly compilado.

GetDefaultCompilerType()

Retorna as configurações do compilador para o idioma padrão no aplicativo.

GetDefaultCompilerTypeForLanguage(String)

Retorna as configurações do compilador para o provedor de build com base no idioma especificado.

GetGeneratedType(CompilerResults)

Retorna um tipo gerado pelo provedor de build do caminho virtual.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetResultFlags(CompilerResults)

Retorna um valor que indica as ações necessárias quando um caminho virtual é compilado.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
OpenReader()

Abre um leitor de texto para leitura do caminho virtual do objeto de provedor de build atual.

OpenReader(String)

Abre um leitor de texto para leitura de um caminho virtual especificado.

OpenStream()

Abre um fluxo para leitura do caminho virtual do objeto de provedor de build atual.

OpenStream(String)

Abre um fluxo para leitura de um caminho virtual especificado.

ProcessCompileErrors(CompilerResults)

Quando substituído em uma classe derivada, permite que você examine as mensagens de erro do compilador para que possa modificá-las para fornecer mais informações.

RegisterBuildProvider(String, Type)

Registra um provedor de build.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também