BuildProvider Класс

Определение

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

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

Примеры

В следующем примере кода показана простая реализация поставщика сборки, наследующая от абстрактного BuildProvider базового класса. Поставщик сборки переопределяет CodeCompilerTypeGetGeneratedTypeи GenerateCode члены базового класса. Пример не включает реализацию 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 класса для сборки файлов в приложении. Свойство VirtualPath BuildProvider класса указывает путь к созданному файлу. Расширение файла каждого файла в приложении сопоставляется с соответствующим поставщиком сборки. Среда сборки ASP.NET инициализирует BuildProvider экземпляр для каждого файла на основе расширения файла и использует BuildProvider методы для создания исходного кода для файла. Среда сборки ASP.NET передает AssemblyBuilder объект на основе предпочтительного языка компилятора и контекста файла BuildProvider методам при сборке сборки из одного или нескольких файлов, чтобы BuildProvider экземпляр смог внести свой исходный код в его файл в общую сборку.

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

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

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

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

Примечание

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

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

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)

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

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