Compartilhar via


AssemblyBuilder Classe

Definição

Fornece um contêiner para a criação de um assembly de um ou mais caminhos virtuais em um projeto do ASP.NET.

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

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 CodeCompilerTypeGetGeneratedTypemembros e GenerateCode os membros da classe base.

Na implementação do GenerateCode método, o provedor de build adiciona o código gerado para a compilação do assembly usando o CreateCodeFile método. O exemplo não inclui a implementação da SampleClassGenerator classe. Para obter mais informações, consulte 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

Comentários

As instâncias da AssemblyBuilder classe são usadas com BuildProvider métodos de classe para criar um ou mais arquivos em um assembly compilado.

A BuildProvider classe define a funcionalidade de build para arquivos individuais e a AssemblyBuilder classe combina o código-fonte contribuído por cada BuildProvider instância em um único assembly. O ambiente de build ASP.NET passa um AssemblyBuilder objeto para os BuildProvider métodos ao criar um assembly de um ou mais arquivos, para que cada BuildProvider instância possa contribuir com o código-fonte para seu arquivo para o assembly geral.

O ambiente de build ASP.NET determina o idioma e o compilador exigidos pelos arquivos dentro do projeto, com base na BuildProvider.CodeCompilerType propriedade. O ambiente de build agrupa arquivos com base nas configurações do compilador e cria um assembly de arquivos que exigem o mesmo compilador.

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

Um BuildProvider objeto contribui com o código-fonte na forma de um grafo CodeDOM usando o AddCodeCompileUnit método. Um BuildProvider objeto contribui com o código-fonte armazenado em um arquivo físico usando o CreateCodeFile método.

Depois que cada BuildProvider objeto contribui com o código-fonte usando os métodos apropriadosAssemblyBuilder, o ambiente de build ASP.NET usa a AssemblyBuilder classe para compilar o código-fonte coletado em um assembly.

Propriedades

CodeDomProvider

Obtém o compilador usado para compilar o código-fonte em um assembly.

Métodos

AddAssemblyReference(Assembly)

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

AddCodeCompileUnit(BuildProvider, CodeCompileUnit)

Adiciona o código-fonte ao assembly na forma de um gráfico CodeDOM.

CreateCodeFile(BuildProvider)

Permite que um provedor de build crie um arquivo de origem temporário e inclua-o na compilação do assembly.

CreateEmbeddedResource(BuildProvider, String)

Permite que um provedor de build crie um arquivo de recurso para incluir na compilação do assembly.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GenerateTypeFactory(String)

Insere um modelo de alocador de objeto para um tipo no assembly compilado.

GetHashCode()

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

(Herdado de Object)
GetTempFilePhysicalPath(String)

Gera um caminho de arquivo temporário.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também