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 派生したクラスは、主にファイル、Web ページ、リソース、およびその他のカスタム項目のソース コードを提供します。

通常、 クラスの BuildProvider インスタンスは直接作成しません。 代わりに、 から BuildProvider派生したクラスを実装し、ASP.NET ビルド環境内で使用するように実装を構成 BuildProvider します。

クラスのインスタンスは BuildProvider 、1 つ以上のファイルをコンパイル済みアセンブリにビルドするためにオブジェクトと共 AssemblyBuilder に使用されます。 インスタンスは BuildProvider 個々のファイルに適した言語でソース コードを生成し、オブジェクトは AssemblyBuilderBuildProvider インスタンスによって提供されるソースを 1 つのアセンブリに結合します。

ASP.NET ビルド環境では、 クラスのインスタンスを BuildProvider 使用して、アプリケーション内のファイルをビルドします。 クラスの プロパティは VirtualPathBuildProvider ビルドするファイルのパスを示します。 アプリケーション内の各ファイルのファイル拡張子は、対応するビルド プロバイダーにマップされます。 ASP.NET ビルド環境では、ファイル拡張子に基づいて各ファイルのインスタンスを初期化 BuildProvider し、 メソッドを BuildProvider 使用してファイルのソース コードを生成します。 ASP.NET ビルド環境は、1 つ以上のファイルからアセンブリを AssemblyBuilder ビルドするときに、優先コンパイラ言語とファイルのコンテキストに BuildProvider 基づいて オブジェクトを メソッドに渡し、インスタンスがそのファイルのソース コードをアセンブリ全体に提供できるようにします BuildProvider

ASP.NET アプリケーション内のファイルの種類のカスタム ビルド アクションを定義するには、 から BuildProviderクラスを派生させ、ファイルの種類をビルドするための派生クラス内のメンバーを実装し、アプリケーション構成ファイル内の対応するファイル拡張子のビルド プロバイダーを構成する必要があります。

要素は add 、サポートされているファイルのファイル拡張子、およびビルド プロバイダーがコード ファイル、Web ファイル、リソース ファイル、またはすべてのファイルをサポートするかどうかを指定します。 属性を type 使用して、ビルド プロバイダーの実装の完全修飾型名を指定します。 クラスを BuildProviderAppliesToAttribute 使用して、ビルド プロバイダーを App_Code ディレクトリ内のファイル、Web コンテンツ ディレクトリ内のファイル、グローバル リソースまたはローカル リソース、またはすべてのファイルに適用するかどうかを指定します。 属性を extension 使用して、クラスがサポートするファイルを識別するために使用するファイル拡張子を BuildProvider 指定します。 クラスを BuildProviderCollection 使用して、構成ファイル内のビルド プロバイダーを調べます。 ビルド プロバイダーの構成の詳細については、「 buildProviders 要素 for compilation (ASP.NET Settings Schema)」を参照してください。

カスタム ファイル型のソース コードを生成するビルド プロバイダーを実装するには、 から BuildProviderクラスを派生させ、 メソッドを GenerateCode オーバーライドして、サポートされているファイルの種類のソース コードを生成します。 生成されたソースは、CodeDOM グラフの形式で、または物理ソース コード ファイルを表すコンテンツとしてオブジェクトに追加されます AssemblyBuilder 。 ビルド プロバイダーで特定のプログラミング言語が必要な場合は、 プロパティを CodeCompilerType オーバーライドして、サポートされているプログラミング言語のオブジェクトを返 CompilerType します。 ビルド プロバイダーが特定のプログラミング言語を必要としない場合は、 プロパティをオーバーライドCodeCompilerTypeしないでください。基本クラスの実装を使用します。これは、ビルド プロバイダーが Visual Basic や C# などの任意の.NET Framework言語を使用できることを示します。

Web コンテンツのソース コードを生成するビルド プロバイダーを実装するには、 からBuildProviderクラスを派生させ、 によってBuildProvider生成されたクラスの をType返すメソッドをオーバーライドGetGeneratedTypeします。 メソッドを GenerateCode オーバーライドして、サポートされているファイルによって提供される型のソース コードを生成します。

Note

カスタマイズした BuildProvider クラスをWeb.config ファイルに追加すると、ASP.NET Web サイトで動作しますが、ASP.NET Web アプリケーション プロジェクトでは機能しません。 Web アプリケーション プロジェクトでは、 クラスによって生成されたコードを BuildProvider アプリケーションに含めることはできません。 詳細については、「 ASP.NET Web アプリケーション プロジェクトプリコンパイルの概要」を参照してください。

コンストラクター

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)

適用対象

こちらもご覧ください