AssemblyBuilder Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Proporciona un contenedor para compilar un ensamblado a partir de una o varias rutas de acceso virtuales dentro de un proyecto de ASP.NET.
public ref class AssemblyBuilder
public class AssemblyBuilder
type AssemblyBuilder = class
Public Class AssemblyBuilder
- Herencia
-
AssemblyBuilder
Ejemplos
En el ejemplo de código siguiente se muestra una implementación sencilla del proveedor de compilación, que hereda de la clase base abstracta BuildProvider . El proveedor de compilación invalida los CodeCompilerTypemiembros , GetGeneratedTypey GenerateCode de la clase base.
En la implementación del GenerateCode método, el proveedor de compilación agrega el código generado para la compilación del ensamblado mediante el CreateCodeFile método . El ejemplo no incluye la implementación de la SampleClassGenerator clase . Para obtener más información, consulte 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()
{
// 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);
}
}
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
Comentarios
Las instancias de la AssemblyBuilder clase se usan con BuildProvider métodos de clase para compilar uno o varios archivos en un ensamblado compilado.
La BuildProvider clase define la funcionalidad de compilación para archivos individuales y la AssemblyBuilder clase combina el código fuente aportado por cada BuildProvider instancia en un único ensamblado. El ASP.NET entorno de compilación pasa un AssemblyBuilder objeto a los BuildProvider métodos al compilar un ensamblado a partir de uno o varios archivos, de modo que cada BuildProvider instancia pueda contribuir al código fuente de su archivo al ensamblado general.
El entorno de compilación de ASP.NET determina el lenguaje y el compilador requeridos por los archivos del proyecto, en función de la BuildProvider.CodeCompilerType propiedad . El entorno de compilación agrupa los archivos en función de su configuración del compilador y compila un ensamblado a partir de archivos que requieren el mismo compilador.
La CodeDomProvider propiedad indica la CodeDomProvider implementación que usa el entorno de compilación de ASP.NET para compilar un ensamblado a partir del código fuente aportado por cada BuildProvider implementación.
Un BuildProvider objeto contribuye al código fuente en forma de gráfico CodeDOM mediante el AddCodeCompileUnit método . Un BuildProvider objeto contribuye al código fuente almacenado en un archivo físico mediante el CreateCodeFile método .
Una vez que cada BuildProvider objeto contribuye al código fuente mediante los métodos adecuados AssemblyBuilder , el entorno de compilación de ASP.NET usa la AssemblyBuilder clase para compilar el código fuente recopilado en un ensamblado.
Propiedades
| Nombre | Description |
|---|---|
| CodeDomProvider |
Obtiene el compilador usado para compilar código fuente en un ensamblado. |
Métodos
| Nombre | Description |
|---|---|
| AddAssemblyReference(Assembly) |
Agrega un ensamblado al que hace referencia el código fuente generado para un archivo. |
| AddCodeCompileUnit(BuildProvider, CodeCompileUnit) |
Agrega código fuente para el ensamblado en forma de gráfico CodeDOM. |
| CreateCodeFile(BuildProvider) |
Permite que un proveedor de compilación cree un archivo de origen temporal e incluya el archivo de origen en la compilación del ensamblado. |
| CreateEmbeddedResource(BuildProvider, String) |
Permite que un proveedor de compilación cree un archivo de recursos que se incluya en la compilación del ensamblado. |
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| GenerateTypeFactory(String) |
Inserta una plantilla rápida de generador de objetos para un tipo en el ensamblado compilado. |
| GetHashCode() |
Actúa como función hash predeterminada. (Heredado de Object) |
| GetTempFilePhysicalPath(String) |
Genera una ruta de acceso de archivo temporal. |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |