Bagikan melalui


BuildProvider Kelas

Definisi

Menentukan sekumpulan properti dan metode untuk menghasilkan kode sumber dalam lingkungan build ASP.NET. Kelas ini abstrak.

public ref class BuildProvider abstract
public abstract class BuildProvider
type BuildProvider = class
Public MustInherit Class BuildProvider
Warisan
BuildProvider
Turunan

Contoh

Contoh kode berikut mengilustrasikan implementasi penyedia build sederhana, mewarisi dari kelas dasar abstrak BuildProvider . Penyedia build mengambil alih CodeCompilerType, , GetGeneratedTypedan GenerateCode anggota kelas dasar. Contoh tidak termasuk implementasi SampleClassGenerator kelas. Untuk informasi selengkapnya, lihat gambaran CodeCompileUnit umum kelas.

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

Keterangan

Lingkungan build ASP.NET menggunakan BuildProvider objek untuk menghasilkan kode sumber untuk berbagai jenis file dalam aplikasi. Kelas yang berasal dari BuildProvider sebagian besar menyediakan kode sumber untuk file, halaman Web, sumber daya, dan item kustom lainnya.

Biasanya, Anda tidak membuat instans BuildProvider kelas secara langsung. Sebagai gantinya, Anda menerapkan kelas yang berasal dari BuildProvider, dan mengonfigurasi BuildProvider implementasi untuk digunakan dalam lingkungan build ASP.NET.

Instans BuildProvider kelas digunakan dengan AssemblyBuilder objek untuk membangun satu atau beberapa file ke dalam rakitan yang dikompilasi. BuildProvider Instans menghasilkan kode sumber dalam bahasa yang sesuai untuk file individual, dan AssemblyBuilder objek menggabungkan sumber yang dikontribusikan oleh setiap BuildProvider instans ke dalam satu rakitan.

Lingkungan build ASP.NET menggunakan instans BuildProvider kelas untuk membangun file dalam aplikasi. Properti VirtualPath kelas BuildProvider menunjukkan jalur file yang akan dibangun. Ekstensi file dari setiap file dalam aplikasi dipetakan ke penyedia build yang sesuai. Lingkungan build ASP.NET menginisialisasi instans BuildProvider untuk setiap file berdasarkan ekstensi file, dan menggunakan BuildProvider metode untuk menghasilkan kode sumber untuk file. Lingkungan build ASP.NET meneruskan AssemblyBuilder objek berdasarkan bahasa pengkompilasi pilihan dan konteks file ke BuildProvider metode saat membangun perakitan dari satu atau beberapa file, sehingga BuildProvider instans dapat menyumbangkan kode sumber untuk filenya ke perakitan keseluruhan.

Untuk menentukan tindakan build kustom untuk jenis file dalam aplikasi ASP.NET, Anda harus mendapatkan kelas dari BuildProvider, menerapkan anggota dalam kelas turunan untuk membangun jenis file, dan mengonfigurasi penyedia build untuk ekstensi file yang sesuai dalam file konfigurasi aplikasi.

Elemen add menentukan ekstensi file untuk file yang didukung, dan apakah penyedia build mendukung file kode, file Web, file sumber daya, atau semua file. type Gunakan atribut untuk menentukan nama jenis implementasi penyedia build yang sepenuhnya memenuhi syarat. BuildProviderAppliesToAttribute Gunakan kelas untuk menentukan apakah penyedia build berlaku untuk file di direktori App_Code, ke file dalam direktori konten Web, ke sumber daya global atau lokal, atau ke semua file. extension Gunakan atribut untuk menentukan ekstensi file yang digunakan untuk mengidentifikasi file yang BuildProvider didukung kelas. BuildProviderCollection Gunakan kelas untuk memeriksa penyedia build dalam file konfigurasi. Untuk informasi selengkapnya tentang mengonfigurasi penyedia build, lihat buildProviders Element untuk kompilasi (ASP.NET Skema Pengaturan).

Untuk menerapkan penyedia build yang menghasilkan kode sumber untuk jenis file kustom, dapatkan kelas dari BuildProvider, dan ambil alih GenerateCode metode untuk menghasilkan kode sumber untuk jenis file yang didukung. Sumber yang dihasilkan ditambahkan ke AssemblyBuilder objek dalam bentuk grafik CodeDOM, atau sebagai konten yang mewakili file kode sumber fisik. Jika penyedia build memerlukan bahasa pemrograman tertentu, ambil alih CodeCompilerType properti untuk mengembalikan CompilerType objek untuk bahasa pemrograman yang didukung. Jika penyedia build tidak memerlukan bahasa pemrograman tertentu, jangan ambil alih CodeCompilerType properti; gunakan implementasi kelas dasar, yang menunjukkan bahwa penyedia build dapat menggunakan bahasa .NET Framework apa pun, seperti Visual Basic atau C#.

Untuk menerapkan penyedia build yang menghasilkan kode sumber untuk konten Web, dapatkan kelas dari BuildProvider dan ambil alih GetGeneratedType metode untuk mengembalikan Type kelas yang dihasilkan oleh BuildProvider. Ambil alih GenerateCode metode untuk menghasilkan kode sumber untuk jenis yang disediakan oleh file yang didukung.

Nota

Menambahkan kelas yang dikustomisasi BuildProvider ke file Web.config berfungsi di situs Web ASP.NET tetapi tidak berfungsi dalam proyek aplikasi Web ASP.NET. Dalam proyek aplikasi Web, kode yang dihasilkan oleh BuildProvider kelas tidak dapat disertakan dalam aplikasi. Untuk informasi selengkapnya, lihat Gambaran Umum Kompilasi Proyek Aplikasi Web ASP.NET.

Konstruktor

Nama Deskripsi
BuildProvider()

Menginisialisasi instans baru dari kelas BuildProvider.

Properti

Nama Deskripsi
CodeCompilerType

Mewakili jenis pengkompilasi yang digunakan oleh penyedia build untuk menghasilkan kode sumber untuk jenis file kustom.

ReferencedAssemblies

Mewakili rakitan untuk dikompilasi dengan sumber yang dihasilkan oleh penyedia build.

VirtualPath

Mewakili file yang akan dibangun oleh implementasi penyedia build ini.

VirtualPathDependencies

Mewakili kumpulan jalur virtual yang harus dibangun sebelum penyedia build menghasilkan kode.

Metode

Nama Deskripsi
Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GenerateCode(AssemblyBuilder)

Menghasilkan kode sumber untuk jalur virtual penyedia build, dan menambahkan kode sumber ke penyusun rakitan tertentu.

GetCodeCompileUnit(IDictionary)

Mewakili kontainer untuk grafik CodeDOM yang dihasilkan.

GetCustomString(CompilerResults)

Menghasilkan string yang akan dipertahankan dalam rakitan yang dikompilasi.

GetDefaultCompilerType()

Mengembalikan pengaturan pengkompilasi untuk bahasa default dalam aplikasi.

GetDefaultCompilerTypeForLanguage(String)

Mengembalikan pengaturan pengkompilasi untuk penyedia build berdasarkan bahasa yang ditentukan.

GetGeneratedType(CompilerResults)

Mengembalikan jenis yang dihasilkan oleh penyedia build dari jalur virtual.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetResultFlags(CompilerResults)

Mengembalikan nilai yang menunjukkan tindakan yang diperlukan saat jalur virtual dibuat.

GetType()

Mendapatkan Type instans saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari Objectsaat ini.

(Diperoleh dari Object)
OpenReader()

Membuka pembaca teks untuk membaca dari jalur virtual objek penyedia build saat ini.

OpenReader(String)

Membuka pembaca teks untuk membaca dari jalur virtual tertentu.

OpenStream()

Membuka aliran untuk membaca jalur virtual objek penyedia build saat ini.

OpenStream(String)

Membuka aliran untuk membaca dari jalur virtual tertentu.

ProcessCompileErrors(CompilerResults)

Saat ditimpa di kelas turunan, memungkinkan Anda meninjau pesan kesalahan pengkompilasi sehingga Anda dapat memodifikasinya untuk memberikan informasi lebih lanjut.

RegisterBuildProvider(String, Type)

Mendaftarkan penyedia build.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga