BuildProvider Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Define um conjunto de propriedades e métodos para gerar código-fonte dentro do ambiente de compilação ASP.NET. Esta aula é 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 seguinte ilustra uma implementação simples de fornecedor de build, herdando da classe base abstrata BuildProvider . O fornecedor de build sobrepõe-se ao CodeCompilerType, GetGeneratedType, e GenerateCode aos membros da classe base. O exemplo não inclui a implementação da SampleClassGenerator classe. Para mais informações, consulte a CodeCompileUnit visão geral da turma.
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
Observações
O ambiente de compilação ASP.NET utiliza objetos BuildProvider para gerar código-fonte para diferentes tipos de ficheiros dentro de uma aplicação. As classes derivadas fornecem BuildProvider predominantemente código-fonte para ficheiros, páginas Web, recursos e outros itens personalizados.
Normalmente, não se cria uma instância da BuildProvider classe diretamente. Em vez disso, implementas uma classe que deriva de BuildProvider e configuras a implementação BuildProvider para uso no ambiente de compilação ASP.NET.
Instâncias da BuildProvider classe são usadas com AssemblyBuilder objetos para construir um ou mais ficheiros numa assembly compilada. Uma BuildProvider instância gera código-fonte na linguagem apropriada para ficheiros individuais, e o AssemblyBuilder objeto combina o código-fonte contribuído por cada BuildProvider instância numa única assembleia.
O ambiente de construção ASP.NET utiliza instâncias da classe BuildProvider para construir ficheiros dentro de uma aplicação. A VirtualPath propriedade da BuildProvider classe indica o caminho do ficheiro a ser construído. A extensão de ficheiro de cada ficheiro dentro de uma aplicação é mapeada para um fornecedor de compilação correspondente. O ambiente de compilação ASP.NET inicializa uma instância BuildProvider para cada ficheiro com base na extensão do ficheiro, e utiliza os métodos BuildProvider para gerar código-fonte para o ficheiro. O ambiente de compilação ASP.NET passa um objeto AssemblyBuilder baseado na linguagem de compilação preferida e no contexto do ficheiro para os métodos BuildProvider ao construir uma assembly a partir de um ou mais ficheiros, de modo que a instância BuildProvider pode contribuir com código-fonte para o seu ficheiro para a assembly global.
Para definir ações de build personalizadas para um tipo de ficheiro numa aplicação ASP.NET, deve derivar uma classe a partir de BuildProvider, implementar membros dentro da classe derivada para construir o tipo de ficheiro e configurar o fornecedor de build para a extensão de ficheiro correspondente dentro do ficheiro de configuração da aplicação.
O add elemento especifica a extensão do ficheiro suportado e se o fornecedor de compilação suporta ficheiros de código, ficheiros Web, ficheiros de recursos ou todos os ficheiros. Use o type atributo para especificar o nome do tipo totalmente qualificado da implementação do fornecedor de compilações. Use a BuildProviderAppliesToAttribute classe para especificar se o fornecedor de compilação se aplica a ficheiros no diretório App_Code, a ficheiros num diretório de conteúdos Web, a recursos globais ou locais, ou a todos os ficheiros. Use o extension atributo para especificar a extensão de ficheiro usada para identificar ficheiros que a BuildProvider classe suporta. Use a BuildProviderCollection classe para examinar fornecedores de compilação num ficheiro de configuração. Para mais informações sobre a configuração de um fornecedor de compilações, consulte
Para implementar um fornecedor de compilação que gera código-fonte para um tipo de ficheiro personalizado, derive uma classe a partir de BuildProvider, e substitua o GenerateCode método para gerar código-fonte para o tipo de ficheiro suportado. O código-fonte gerado é adicionado ao AssemblyBuilder objeto sob a forma de um grafo CodeDOM, ou como conteúdo que representa um ficheiro físico de código-fonte. Se o fornecedor de compilação exigir uma linguagem de programação específica, substitua a CodeCompilerType propriedade para devolver um CompilerType objeto para a linguagem de programação suportada. Se o fornecedor de compilação não exigir uma linguagem de programação específica, não sobrepor a propriedade CodeCompilerType; usar a implementação da classe base, que indica que o fornecedor de compilação pode usar qualquer linguagem .NET Framework, como Visual Basic ou C#.
Para implementar um fornecedor de compilação que gera código-fonte para conteúdo Web, derive uma classe de BuildProvider e sobrepone o GetGeneratedType método para devolver Type o para a classe gerada por BuildProvider. Substitua o GenerateCode método para gerar código-fonte para o tipo fornecido pelo ficheiro suportado.
Note
Adicionar uma classe personalizada BuildProvider ao ficheiro Web.config funciona num site ASP.NET, mas não funciona num projeto de aplicação Web ASP.NET. Num projeto de aplicação Web, o código gerado pela BuildProvider classe não pode ser incluído na aplicação. Para mais informações, consulte ASP.NET Web Application Project Precompilation Overview.
Construtores
| Name | Description |
|---|---|
| BuildProvider() |
Inicializa uma nova instância da BuildProvider classe. |
Propriedades
| Name | Description |
|---|---|
| CodeCompilerType |
Representa o tipo de compilador usado por um fornecedor de compilações para gerar código-fonte para um tipo de ficheiro personalizado. |
| ReferencedAssemblies |
Representa os assemblies a compilar com o código-fonte gerado pelo fornecedor de compilação. |
| VirtualPath |
Representa o ficheiro a ser construído por esta implementação do fornecedor de compilações. |
| VirtualPathDependencies |
Representa um conjunto de caminhos virtuais que devem ser construídos antes de o fornecedor de compilação gerar código. |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GenerateCode(AssemblyBuilder) |
Gera código-fonte para o caminho virtual do fornecedor de build e adiciona o código-fonte a um assembly builder especificado. |
| GetCodeCompileUnit(IDictionary) |
Representa o contentor para o grafo CodeDOM gerado. |
| GetCustomString(CompilerResults) |
Gera uma string a ser mantida na assembly compilada. |
| GetDefaultCompilerType() |
Devolve as definições do compilador para a linguagem padrão na aplicação. |
| GetDefaultCompilerTypeForLanguage(String) |
Devolve as definições do compilador para o fornecedor de compilação com base na linguagem especificada. |
| GetGeneratedType(CompilerResults) |
Devolve um tipo gerado pelo fornecedor de compilação a partir do caminho virtual. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetResultFlags(CompilerResults) |
Devolve um valor que indica as ações necessárias quando um caminho virtual é construído. |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| OpenReader() |
Abre um leitor de texto para ler a partir do caminho virtual do objeto fornecedor de compilação atual. |
| OpenReader(String) |
Abre um leitor de texto para ler a partir de um caminho virtual especificado. |
| OpenStream() |
Abre um stream para ler o caminho virtual do objeto fornecedor de compilação atual. |
| OpenStream(String) |
Abre um fluxo para ler a partir de um caminho virtual especificado. |
| ProcessCompileErrors(CompilerResults) |
Quando sobreposto numa classe derivada, permite-lhe rever mensagens de erro do compilador para que possa modificá-las e fornecer mais informação. |
| RegisterBuildProvider(String, Type) |
Regista um fornecedor de builds. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |