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) |