Бөлісу құралы:


AssemblyBuilder Класс

Определение

Предоставляет контейнер для создания сборки из одного или нескольких виртуальных путей в проекте ASP.NET.

public ref class AssemblyBuilder
public class AssemblyBuilder
type AssemblyBuilder = class
Public Class AssemblyBuilder
Наследование
AssemblyBuilder

Примеры

В следующем примере кода показана простая реализация поставщика сборки, наследуемая от абстрактного BuildProvider базового класса. Поставщик сборки переопределяет CodeCompilerTypeGetGeneratedTypeGenerateCode и члены базового класса.

GenerateCode В реализации метода поставщик сборки добавляет созданный код для компиляции сборки с помощью CreateCodeFile метода. Пример не включает реализацию SampleClassGenerator класса. Дополнительные сведения см. в разделе 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

Комментарии

Экземпляры AssemblyBuilder класса используются с BuildProvider методами класса для создания одного или нескольких файлов в скомпилированной сборке.

Класс BuildProvider определяет функциональные возможности сборки для отдельных файлов, а AssemblyBuilder класс объединяет исходный код, внесенный каждым BuildProvider экземпляром в одну сборку. Среда сборки ASP.NET передает AssemblyBuilder объект BuildProvider методам при сборке сборки из одного или нескольких файлов, чтобы каждый BuildProvider экземпляр смог внести исходный код для файла в общую сборку.

Среда сборки ASP.NET определяет язык и компилятор, необходимые файлам в проекте, на BuildProvider.CodeCompilerType основе свойства. Среда сборки группирует файлы на основе параметров компилятора и создает сборку из файлов, требующих того же компилятора.

Свойство CodeDomProvider указывает CodeDomProvider реализацию, которую среда сборки ASP.NET использует для компиляции сборки из исходного кода, внося в каждую BuildProvider реализацию.

BuildProvider Объект вносит исходный код в виде графа CodeDOM с помощью AddCodeCompileUnit метода. Объект BuildProvider вносит исходный код, хранящийся в физическом файле с помощью CreateCodeFile метода.

После того как каждый BuildProvider объект вносит исходный код с помощью соответствующих AssemblyBuilder методов, среда сборки ASP.NET использует AssemblyBuilder класс для компиляции собранного исходного кода в сборку.

Свойства

Имя Описание
CodeDomProvider

Возвращает компилятор, используемый для сборки исходного кода в сборку.

Методы

Имя Описание
AddAssemblyReference(Assembly)

Добавляет сборку, на которую ссылается исходный код, созданный для файла.

AddCodeCompileUnit(BuildProvider, CodeCompileUnit)

Добавляет исходный код для сборки в виде графа CodeDOM.

CreateCodeFile(BuildProvider)

Позволяет поставщику сборки создать временный исходный файл и включить исходный файл в компиляцию сборок.

CreateEmbeddedResource(BuildProvider, String)

Позволяет поставщику сборки создать файл ресурсов для включения в компиляцию сборок.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GenerateTypeFactory(String)

Вставляет шаблон фабрики быстрых объектов для типа в скомпилированную сборку.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetTempFilePhysicalPath(String)

Создает временный путь к файлу.

GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к

См. также раздел