Поделиться через


BuildProvider Класс

Определение

Определяет набор свойств и методов для создания исходного кода в среде сборки ASP.NET. Этот класс является абстрактным.

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
Наследование
BuildProvider
Производный

Примеры

В следующем примере кода показана простая реализация поставщика сборки, наследуемая от абстрактного BuildProvider базового класса. Поставщик сборки переопределяет CodeCompilerTypeGetGeneratedTypeGenerateCode и члены базового класса. Пример не включает реализацию 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()
    {
        _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

Комментарии

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

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

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

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

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

Элемент add задает расширение файла для поддерживаемых файлов и поддерживает ли поставщик сборки файлы кода, веб-файлы, файлы ресурсов или все файлы. type Используйте атрибут, чтобы указать полное имя типа реализации поставщика сборки. BuildProviderAppliesToAttribute Используйте класс, чтобы указать, применяется ли поставщик сборки к файлам в каталоге App_Code, к файлам в каталоге веб-содержимого, к глобальным или локальным ресурсам или ко всем файлам. extension Используйте атрибут, чтобы указать расширение файла, используемое для идентификации файлов, поддерживаемых классомBuildProvider. BuildProviderCollection Используйте класс для проверки поставщиков сборок в файле конфигурации. Дополнительные сведения о настройке поставщика сборки см. в разделе "Элемент buildProviders" для компиляции (схема параметров ASP.NET).

Для реализации поставщика сборки, создающего исходный код для пользовательского типа файла, наследуйте класс из BuildProviderи переопределите GenerateCode метод для создания исходного кода для поддерживаемого типа файла. Созданный источник добавляется в AssemblyBuilder объект в виде графа CodeDOM или в виде содержимого, представляющего файл физического исходного кода. Если поставщик сборки требует определенного языка программирования, переопределите CodeCompilerType свойство для возврата CompilerType объекта для поддерживаемого языка программирования. Если поставщик сборки не требует определенного языка программирования, не переопределите CodeCompilerType свойство; используйте реализацию базового класса, которая указывает, что поставщик сборки может использовать любой язык .NET Framework, например Visual Basic или C#.

Чтобы реализовать поставщик сборки, создающий исходный код веб-содержимого, наследуйте класс из BuildProvider метода, GetGeneratedType который возвращает Type класс, созданный с помощью BuildProvider. Переопределите GenerateCode метод для создания исходного кода для типа, предоставленного поддерживаемым файлом.

Замечание

Добавление настраиваемого BuildProvider класса в файл Web.config работает на веб-сайте ASP.NET, но не работает в проекте веб-приложения ASP.NET. В проекте веб-приложения код, созданный BuildProvider классом, не может быть включен в приложение. Дополнительные сведения см. в разделе ASP.NET Обзор предварительной компиляции проекта веб-приложения.

Конструкторы

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

Инициализирует новый экземпляр класса BuildProvider.

Свойства

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

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

ReferencedAssemblies

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

VirtualPath

Представляет файл, который будет создан этой реализацией поставщика сборки.

VirtualPathDependencies

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

Методы

Имя Описание
Equals(Object)

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

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

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

GetCodeCompileUnit(IDictionary)

Представляет контейнер для созданного графа CodeDOM.

GetCustomString(CompilerResults)

Создает строку для сохранения в скомпилированной сборке.

GetDefaultCompilerType()

Возвращает параметры компилятора для языка по умолчанию в приложении.

GetDefaultCompilerTypeForLanguage(String)

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

GetGeneratedType(CompilerResults)

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

GetHashCode()

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

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

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

GetType()

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

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

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

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

Открывает средство чтения текста для чтения из виртуального пути текущего объекта поставщика сборки.

OpenReader(String)

Открывает средство чтения текста для чтения из указанного виртуального пути.

OpenStream()

Открывает поток для чтения виртуального пути текущего объекта поставщика сборки.

OpenStream(String)

Открывает поток для чтения из указанного виртуального пути.

ProcessCompileErrors(CompilerResults)

При переопределении в производном классе позволяет просматривать сообщения об ошибках компилятора, чтобы их можно было изменить, чтобы предоставить дополнительные сведения.

RegisterBuildProvider(String, Type)

Регистрирует поставщика сборки.

ToString()

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

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

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

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