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

Public Function CreateCodeFile ( _ buildProvider As BuildProvider _ ) As TextWriter
Dim instance As AssemblyBuilder Dim buildProvider As BuildProvider Dim returnValue As TextWriter returnValue = instance.CreateCodeFile(buildProvider)
public TextWriter CreateCodeFile ( BuildProvider buildProvider )
public: TextWriter^ CreateCodeFile ( BuildProvider^ buildProvider )
public TextWriter CreateCodeFile ( BuildProvider buildProvider )
public function CreateCodeFile ( buildProvider : BuildProvider ) : TextWriter
戻り値
ソース コードを一時ファイルに書き込むために使用できる、開かれた TextWriter。

仮想パスに対してソース ファイルを生成する場合、BuildProvider 実装は CreateCodeFile メソッドを呼び出します。CreateCodeFile を使用して追加されたソース コードはアセンブリ コンパイルに含められます。
通常、ビルド プロバイダの GenerateCode メソッド実装は、VirtualPath プロパティを読み込み、その内容を解析して、生成されたソース コードを、指定された AssemblyBuilder オブジェクトに追加します。ビルド プロバイダは CreateCodeFile メソッドを使用して、ソース コードを物理ファイルとしてアセンブリに追加します。別の方法として、ビルド プロバイダは AddCodeCompileUnit メソッドを使用して、ソース コードを CodeDOM グラフとしてアセンブリに追加することもできます。
ビルド プロバイダは CreateCodeFile を呼び出した後、返された TextWriter オブジェクトを使用してソース ファイルの内容を書き込みます。ソース ファイルを書き込んだ後は、BuildProvider オブジェクトは Close メソッドを使用して TextWriter オブジェクトを閉じ、関連付けられたシステム リソースを解放する必要があります。

簡単なビルド プロバイダを、抽象基本クラス BuildProvider から継承して実装するコード例を次に示します。ビルド プロバイダは、基本クラスのメンバである CodeCompilerType、GetGeneratedType、および GenerateCode をオーバーライドします。
GenerateCode メソッドの実装では、ビルド プロバイダは CreateCodeFile メソッドを使用して、アセンブリ コンパイル用の生成済みコードを追加します。
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 a method that returns details for the ' code compiler for this build provider. Public Function GetCompilerTypeDetails() As String Dim details As StringBuilder = New StringBuilder("") If Not _compilerType Is Nothing Then ' Format a string that contains the code compiler ' implementation, and various compiler details. details.AppendFormat("CodeDomProvider type: {0}; ", _ _compilerType.CodeDomProviderType.ToString()) details.AppendFormat("Compiler debug build = {0}; ", _ _compilerType.CompilerParameters.IncludeDebugInformation.ToString()) details.AppendFormat("Compiler warning level = {0}; ", _ _compilerType.CompilerParameters.WarningLevel.ToString()) If Not _compilerType.CompilerParameters.CompilerOptions Is Nothing Then details.AppendFormat("Compiler options: {0}; ", _ _compilerType.CompilerParameters.CompilerOptions.ToString()) End If End If Return details.ToString() End Function ' 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.CreateGenerator().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() { // Set the compiler to use Visual Basic. _compilerType = GetDefaultCompilerTypeForLanguage("C#"); } // Return the internal CompilerType member // defined in this implementation. public override CompilerType CodeCompilerType { get { return _compilerType; } } // Define a method that returns details for the // code compiler for this build provider. public string GetCompilerTypeDetails() { StringBuilder details = new StringBuilder(""); if (_compilerType != null) { // Format a string that contains the code compiler // implementation, and various compiler details. details.AppendFormat("CodeDomProvider type: {0}; \n", _compilerType.CodeDomProviderType.ToString()); details.AppendFormat("Compiler debug build = {0}; \n", _compilerType.CompilerParameters.IncludeDebugInformation.ToString()); details.AppendFormat("Compiler warning level = {0}; \n", _compilerType.CompilerParameters.WarningLevel.ToString()); if (_compilerType.CompilerParameters.CompilerOptions != null) { details.AppendFormat("Compiler options: {0}; \n", _compilerType.CompilerParameters.CompilerOptions.ToString()); } } return details.ToString(); } // 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.CreateGenerator().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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- AssemblyBuilder.CreateCodeFile メソッドのページへのリンク