BuildProvider.GenerateCode メソッド
アセンブリ: System.Web (system.web.dll 内)

Dim instance As BuildProvider Dim assemblyBuilder As AssemblyBuilder instance.GenerateCode(assemblyBuilder)

独自のファイルの種類でソース コードを生成するビルド プロバイダを実装するには、BuildProvider クラスからクラスを派生し、GenerateCode メソッドをオーバーライドすることで、目的のファイルの種類をサポートするソース コードを生成します。
通常、ビルド プロバイダの GenerateCode の実装では、VirtualPath プロパティを読み込み、その内容を解析してから、生成されたソース コードを指定した AssemblyBuilder オブジェクトに追加します。ソース コードは、TextWriter オブジェクトまたは CodeDOM グラフの形式でアセンブリに指定できます。TextWriter を使用してソース コードをアセンブリに追加するには、CreateCodeFile メソッドを使用します。CodeDOM グラフの形式でソース コードをアセンブリに追加するには、AddCodeCompileUnit メソッドを使用します。
ビルド プロバイダが独自のプログラミング言語でソース コードを生成する場合は、CodeCompilerType プロパティをオーバーライドして、そのプログラミング言語をサポートする CompilerType オブジェクトを返すようにする必要があります。

簡単なビルド プロバイダを、抽象基本クラス BuildProvider から継承して実装するコード例を次に示します。ビルド プロバイダは、基本クラスのメンバである CodeCompilerType、GetGeneratedType、および GenerateCode をオーバーライドします。
Imports Microsoft.VisualBasic Imports System 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
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); } }

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- BuildProvider.GenerateCode メソッドのページへのリンク