AssemblyBuilder Classe

Definição

Fornece um contentor para construir um assembly a partir de um ou mais caminhos virtuais dentro de um projeto ASP.NET.

public ref class AssemblyBuilder
public class AssemblyBuilder
type AssemblyBuilder = class
Public Class AssemblyBuilder
Herança
AssemblyBuilder

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.

Na implementação do GenerateCode método, o fornecedor de compilação adiciona o código gerado para a compilação assembly usando o CreateCodeFile método. O exemplo não inclui a implementação da SampleClassGenerator classe. Para obter mais informações, veja CodeCompileUnit.

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()
    {
        // Set the compiler to use Visual Basic.
        _compilerType = GetDefaultCompilerTypeForLanguage("C#");
    }

    // Return the internal CompilerType member 
    // defined in this implementation.
    public override CompilerType CodeCompilerType
    {
        get { return _compilerType; }
    }

    // Define a method that returns details for the 
    // code compiler for this build provider.
    public string GetCompilerTypeDetails()
    {
        StringBuilder details = new StringBuilder("");

        if (_compilerType != null)
        {
            // Format a string that contains the code compiler
            // implementation, and various compiler details.

            details.AppendFormat("CodeDomProvider type: {0}; \n",
                _compilerType.CodeDomProviderType.ToString());
            details.AppendFormat("Compiler debug build = {0}; \n",
                _compilerType.CompilerParameters.IncludeDebugInformation.ToString());
            details.AppendFormat("Compiler warning level = {0}; \n",
                _compilerType.CompilerParameters.WarningLevel.ToString());

            if (_compilerType.CompilerParameters.CompilerOptions != null)
            {
                details.AppendFormat("Compiler options: {0}; \n",
                    _compilerType.CompilerParameters.CompilerOptions.ToString());
            }
        }
        return details.ToString();
    }

    // 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.CreateGenerator().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 a method that returns details for the 
    ' code compiler for this build provider.
    Public Function GetCompilerTypeDetails() As String
        Dim details As StringBuilder = New StringBuilder("")

        If Not _compilerType Is Nothing Then
            ' Format a string that contains the code compiler
            ' implementation, and various compiler details.

            details.AppendFormat("CodeDomProvider type: {0}; ", _
                _compilerType.CodeDomProviderType.ToString())
            details.AppendFormat("Compiler debug build = {0}; ", _
                _compilerType.CompilerParameters.IncludeDebugInformation.ToString())
            details.AppendFormat("Compiler warning level = {0}; ", _
                _compilerType.CompilerParameters.WarningLevel.ToString())

            If Not _compilerType.CompilerParameters.CompilerOptions Is Nothing Then
                details.AppendFormat("Compiler options: {0}; ", _
                    _compilerType.CompilerParameters.CompilerOptions.ToString())
            End If
        End If
        Return details.ToString()
    End Function

    ' 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.CreateGenerator().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

As instâncias da AssemblyBuilder classe são usadas com BuildProvider métodos de classe para construir um ou mais ficheiros numa assembly compilada.

A BuildProvider classe define funcionalidade de compilação para ficheiros individuais, e a AssemblyBuilder classe combina o código-fonte contribuído por cada BuildProvider instância numa única assembleia. O ambiente de compilação ASP.NET passa um objeto AssemblyBuilder para os métodos BuildProvider ao construir um assembly a partir de um ou mais ficheiros, de modo que cada instância BuildProvider possa contribuir com código-fonte para o seu ficheiro para a assembly global.

O ambiente de compilação ASP.NET determina a linguagem e o compilador exigidos pelos ficheiros dentro do projeto, com base na propriedade BuildProvider.CodeCompilerType. O ambiente de compilação agrupa os ficheiros com base nas definições do compilador e constrói um assembly a partir de ficheiros que requerem o mesmo compilador.

A propriedade CodeDomProvider indica a implementação CodeDomProvider que o ambiente de compilação ASP.NET utiliza para compilar uma assembly a partir do código-fonte contribuído por cada implementação BuildProvider.

Um BuildProvider objeto contribui com código-fonte sob a forma de um grafo CodeDOM usando o AddCodeCompileUnit método. Um BuildProvider objeto contribui com código-fonte armazenado num ficheiro físico usando o CreateCodeFile método.

Após cada objeto BuildProvider contribuir com código-fonte usando os métodos apropriados AssemblyBuilder, o ambiente de compilação ASP.NET utiliza a classe AssemblyBuilder para compilar o código-fonte recolhido numa assembleia.

Propriedades

Name Description
CodeDomProvider

Obtém o compilador usado para construir código-fonte numa assembly.

Métodos

Name Description
AddAssemblyReference(Assembly)

Adiciona um assembly que é referenciado pelo código-fonte gerado para um ficheiro.

AddCodeCompileUnit(BuildProvider, CodeCompileUnit)

Adiciona código-fonte para o assembly sob a forma de um grafo CodeDOM.

CreateCodeFile(BuildProvider)

Permite que um fornecedor de compilações crie um ficheiro fonte temporário e inclua o ficheiro fonte na compilação assembly.

CreateEmbeddedResource(BuildProvider, String)

Permite que um fornecedor de compilações crie um ficheiro de recurso para incluir na compilação assembly.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GenerateTypeFactory(String)

Insere um template rápido de fábrica de objetos para um tipo na assembly compilada.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetTempFilePhysicalPath(String)

Gera um caminho temporário de ficheiro.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também