AssemblyBuilder.CreateCodeFile Method (BuildProvider)
Allows a build provider to create a temporary source file, and include the source file in the assembly compilation.
Assembly: System.Web (in System.Web.dll)
Parameters
- buildProvider
-
Type:
System.Web.Compilation.BuildProvider
The build provider generating the code source file.
Return Value
Type: System.IO.TextWriterAn open TextWriter that can be used to write source code to a temporary file.
A BuildProvider implementation calls the CreateCodeFile method when generating a source file for a virtual path. Source code added with CreateCodeFile is included in the assembly compilation.
Typically, a build provider GenerateCode method implementation reads the VirtualPath property, parses the contents, and then adds the generated source code to the specified AssemblyBuilder object. The build provider uses the CreateCodeFile method to add source code as a physical file to the assembly. Alternately, the build provider can use the AddCodeCompileUnit method to add source code as a CodeDOM graph to the assembly.
After calling CreateCodeFile, the build provider writes the source file contents using the returned TextWriter object. After writing the source file, the BuildProvider object must use the Close method to close the TextWriter object and free associated system resources.
The following code example illustrates a simple build provider implementation, inheriting from the abstract BuildProvider base class. The build provider overrides the CodeCompilerType, GetGeneratedType, and GenerateCode members of the base class.
In the GenerateCode method implementation, the build provider adds the generated code for the assembly compilation using the CreateCodeFile method. The example does not include the implementation of the SampleClassGenerator class. For more information, see CodeCompileUnit.
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
Available since 2.0