PersistedAssemblyBuilder Clase

Definición

Proporciona una implementación de AssemblyBuilder que puede conservar un ensamblado en un disco o secuencia.

public ref class PersistedAssemblyBuilder sealed : System::Reflection::Emit::AssemblyBuilder
public sealed class PersistedAssemblyBuilder : System.Reflection.Emit.AssemblyBuilder
type PersistedAssemblyBuilder = class
    inherit AssemblyBuilder
Public NotInheritable Class PersistedAssemblyBuilder
Inherits AssemblyBuilder
Herencia
PersistedAssemblyBuilder

Comentarios

La API de AssemblyBuilder.Save no se ha migrado originalmente a .NET (Core) porque la implementación depende en gran medida del código nativo específico de Windows que tampoco se ha migrado. .NET 9 agregó la PersistedAssemblyBuilder clase , que proporciona una implementación totalmente administrada Reflection.Emit que admite el ahorro. Esta implementación no tiene ninguna dependencia de la implementación de Reflection.Emit específica del entorno de ejecución existente. Es decir, ahora hay dos implementaciones diferentes en .NET: ejecutable y persistente. Para ejecutar el ensamblado persistente, guárdelo primero en un flujo de memoria o en un archivo y vuelva a cargarlo.

Antes de PersistedAssemblyBuilder, solo podía ejecutar un ensamblado generado y no guardarlo. Dado que el ensamblado solo estaba en memoria, era difícil depurar. Las ventajas de guardar un ensamblado dinámico en un archivo son:

  • Puede comprobar el ensamblado generado con herramientas como ILVerify o descompilar y examinarlo manualmente con herramientas como ILSpy.
  • El ensamblado guardado se puede cargar directamente, sin necesidad de volver a compilar, lo que puede reducir el tiempo de inicio de la aplicación.

Para crear una instancia de PersistedAssemblyBuilder, use el constructor PersistedAssemblyBuilder(AssemblyName, Assembly, IEnumerable<CustomAttributeBuilder>). El parámetro coreAssembly se usa para resolver los tipos de tiempo de ejecución base y se puede usar para resolver el control de versiones de ensamblado de referencia:

  • Si Reflection.Emit se usa para generar un ensamblado que solo se ejecutará en la misma versión en tiempo de ejecución que la versión en tiempo de ejecución en la que se ejecuta el compilador (normalmente en proceso), el ensamblado principal puede ser simplemente typeof(object).Assembly. En el ejemplo siguiente se muestra cómo crear y guardar un ensamblado en un flujo y ejecutarlo con el ensamblado de tiempo de ejecución actual.

    public static void CreateSaveAndRunAssembly()
    {
        PersistedAssemblyBuilder ab = new(new AssemblyName("MyAssembly"), typeof(object).Assembly);
        ModuleBuilder mob = ab.DefineDynamicModule("MyModule");
        TypeBuilder tb = mob.DefineType(
            "MyType",
            TypeAttributes.Public | TypeAttributes.Class);
        MethodBuilder meb = tb.DefineMethod(
            "SumMethod",
            MethodAttributes.Public | MethodAttributes.Static,
            typeof(int), [typeof(int), typeof(int)]);
        ILGenerator il = meb.GetILGenerator();
        il.Emit(OpCodes.Ldarg_0);
        il.Emit(OpCodes.Ldarg_1);
        il.Emit(OpCodes.Add);
        il.Emit(OpCodes.Ret);
    
        tb.CreateType();
    
        using var stream = new MemoryStream();
        ab.Save(stream);  // Or pass filename to save into a file.
        stream.Seek(0, SeekOrigin.Begin);
        Assembly assembly = AssemblyLoadContext.Default.LoadFromStream(stream);
        MethodInfo method = assembly.GetType("MyType").GetMethod("SumMethod");
        Console.WriteLine(method.Invoke(null, [5, 10]));
    }
    
  • Si se usa Reflection.Emit para generar un ensamblado orientado a un TFM específico, abra los ensamblados de referencia para el TFM especificado mediante MetadataLoadContext y use el valor de la propiedad MetadataLoadContext.CoreAssembly para coreAssembly. Este valor permite que el generador se ejecute en una versión en tiempo de ejecución de .NET y tener como destino una versión en tiempo de ejecución de .NET diferente. Debe usar los tipos devueltos por la instancia de MetadataLoadContext al hacer referencia a los tipos principales. Por ejemplo, en lugar de typeof(int), busque el tipo System.Int32 en MetadataLoadContext.CoreAssembly por nombre.

    public static void CreatePersistedAssemblyBuilderCoreAssemblyWithMetadataLoadContext(string refAssembliesPath)
    {
        PathAssemblyResolver resolver = new(Directory.GetFiles(refAssembliesPath, "*.dll"));
        using MetadataLoadContext context = new(resolver);
        Assembly coreAssembly = context.CoreAssembly;
        PersistedAssemblyBuilder ab = new(new AssemblyName("MyDynamicAssembly"), coreAssembly);
        TypeBuilder typeBuilder = ab.DefineDynamicModule("MyModule").DefineType("Test", TypeAttributes.Public);
        MethodBuilder methodBuilder = typeBuilder.DefineMethod("Method", MethodAttributes.Public, coreAssembly.GetType(typeof(int).FullName), Type.EmptyTypes);
        // .. add members and save the assembly
    }
    

Configura el punto de entrada para un ejecutable

Para establecer el punto de entrada de un archivo ejecutable o para establecer otras opciones para el archivo de ensamblado, puede llamar al método public MetadataBuilder GenerateMetadata(out BlobBuilder ilStream, out BlobBuilder mappedFieldData) y usar los metadatos rellenados para generar el ensamblado con opciones deseadas, por ejemplo:

public static void SetEntryPoint()
{
    PersistedAssemblyBuilder ab = new(new AssemblyName("MyAssembly"), typeof(object).Assembly);
    TypeBuilder tb = ab.DefineDynamicModule("MyModule").DefineType("MyType", TypeAttributes.Public | TypeAttributes.Class);
    // ...
    MethodBuilder entryPoint = tb.DefineMethod("Main", MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Static);
    ILGenerator il2 = entryPoint.GetILGenerator();
    // ...
    il2.Emit(OpCodes.Ret);
    tb.CreateType();

    MetadataBuilder metadataBuilder = ab.GenerateMetadata(out BlobBuilder ilStream, out BlobBuilder fieldData);

    ManagedPEBuilder peBuilder = new(
                    header: PEHeaderBuilder.CreateExecutableHeader(),
                    metadataRootBuilder: new MetadataRootBuilder(metadataBuilder),
                    ilStream: ilStream,
                    mappedFieldData: fieldData,
                    entryPoint: MetadataTokens.MethodDefinitionHandle(entryPoint.MetadataToken));

    BlobBuilder peBlob = new();
    peBuilder.Serialize(peBlob);

    // Create the executable:
    using FileStream fileStream = new("MyAssembly.exe", FileMode.Create, FileAccess.Write);
    peBlob.WriteContentTo(fileStream);
}

Emisión de símbolos y generación de PDB

Los metadatos de los símbolos se rellenan en el parámetro de salida pdbBuilder cuando se llama al método GenerateMetadata(BlobBuilder, BlobBuilder) en una instancia de PersistedAssemblyBuilder. Para crear un ensamblado con una PDB portátil:

  1. Cree instancias de ISymbolDocumentWriter con el método ModuleBuilder.DefineDocument(String, Guid, Guid, Guid). Al emitir el IL del método, también emite la información del símbolo correspondiente.
  2. Cree una instancia de PortablePdbBuilder mediante la instancia de pdbBuilder generada por el método GenerateMetadata(BlobBuilder, BlobBuilder).
  3. Serialice el PortablePdbBuilder en un Bloby escriba el Blob en un flujo de archivos PDB (solo si está generando una PDB independiente).
  4. Cree una instancia de DebugDirectoryBuilder y agregue un DebugDirectoryBuilder.AddCodeViewEntry (PDB independiente) o DebugDirectoryBuilder.AddEmbeddedPortablePdbEntry.
  5. Establezca el argumento opcional debugDirectoryBuilder al crear la instancia de PEBuilder.

En el ejemplo siguiente se muestra cómo emitir información de símbolos y generar un archivo PDB.

static void GenerateAssemblyWithPdb()
{
    PersistedAssemblyBuilder ab = new PersistedAssemblyBuilder(new AssemblyName("MyAssembly"), typeof(object).Assembly);
    ModuleBuilder mb = ab.DefineDynamicModule("MyModule");
    TypeBuilder tb = mb.DefineType("MyType", TypeAttributes.Public | TypeAttributes.Class);
    MethodBuilder mb1 = tb.DefineMethod("SumMethod", MethodAttributes.Public | MethodAttributes.Static, typeof(int), [typeof(int), typeof(int)]);
    ISymbolDocumentWriter srcDoc = mb.DefineDocument("MySourceFile.cs", SymLanguageType.CSharp);
    ILGenerator il = mb1.GetILGenerator();
    LocalBuilder local = il.DeclareLocal(typeof(int));
    local.SetLocalSymInfo("myLocal");
    il.MarkSequencePoint(srcDoc, 7, 0, 7, 11);
    ...
    il.Emit(OpCodes.Ret);

    MethodBuilder entryPoint = tb.DefineMethod("Main", MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Static);
    ILGenerator il2 = entryPoint.GetILGenerator();
    il2.BeginScope();
    ...
    il2.EndScope();
    ...
    tb.CreateType();

    MetadataBuilder metadataBuilder = ab.GenerateMetadata(out BlobBuilder ilStream, out _, out MetadataBuilder pdbBuilder);
    MethodDefinitionHandle entryPointHandle = MetadataTokens.MethodDefinitionHandle(entryPoint.MetadataToken);
    DebugDirectoryBuilder debugDirectoryBuilder = GeneratePdb(pdbBuilder, metadataBuilder.GetRowCounts(), entryPointHandle);

    ManagedPEBuilder peBuilder = new ManagedPEBuilder(
                    header: new PEHeaderBuilder(imageCharacteristics: Characteristics.ExecutableImage, subsystem: Subsystem.WindowsCui),
                    metadataRootBuilder: new MetadataRootBuilder(metadataBuilder),
                    ilStream: ilStream,
                    debugDirectoryBuilder: debugDirectoryBuilder,
                    entryPoint: entryPointHandle);

    BlobBuilder peBlob = new BlobBuilder();
    peBuilder.Serialize(peBlob);

    using var fileStream = new FileStream("MyAssembly.exe", FileMode.Create, FileAccess.Write);
    peBlob.WriteContentTo(fileStream);
}

static DebugDirectoryBuilder GeneratePdb(MetadataBuilder pdbBuilder, ImmutableArray<int> rowCounts, MethodDefinitionHandle entryPointHandle)
{
    BlobBuilder portablePdbBlob = new BlobBuilder();
    PortablePdbBuilder portablePdbBuilder = new PortablePdbBuilder(pdbBuilder, rowCounts, entryPointHandle);
    BlobContentId pdbContentId = portablePdbBuilder.Serialize(portablePdbBlob);
    // In case saving PDB to a file
    using FileStream fileStream = new FileStream("MyAssemblyEmbeddedSource.pdb", FileMode.Create, FileAccess.Write);
    portablePdbBlob.WriteContentTo(fileStream);

    DebugDirectoryBuilder debugDirectoryBuilder = new DebugDirectoryBuilder();
    debugDirectoryBuilder.AddCodeViewEntry("MyAssemblyEmbeddedSource.pdb", pdbContentId, portablePdbBuilder.FormatVersion);
    // In case embedded in PE:
    // debugDirectoryBuilder.AddEmbeddedPortablePdbEntry(portablePdbBlob, portablePdbBuilder.FormatVersion);
    return debugDirectoryBuilder;
}

Además, puede agregar CustomDebugInformation llamando al método MetadataBuilder.AddCustomDebugInformation(EntityHandle, GuidHandle, BlobHandle) desde la instancia de pdbBuilder para agregar información avanzada de PDB de inserción de origen e indexación de origen.

private static void EmbedSource(MetadataBuilder pdbBuilder)
{
    byte[] sourceBytes = File.ReadAllBytes("MySourceFile2.cs");
    BlobBuilder sourceBlob = new BlobBuilder();
    sourceBlob.WriteBytes(sourceBytes);
    pdbBuilder.AddCustomDebugInformation(MetadataTokens.DocumentHandle(1),
        pdbBuilder.GetOrAddGuid(new Guid("0E8A571B-6926-466E-B4AD-8AB04611F5FE")), pdbBuilder.GetOrAddBlob(sourceBlob));
}

Adición de recursos con PersistedAssemblyBuilder

Puede llamar a MetadataBuilder.AddManifestResource(ManifestResourceAttributes, StringHandle, EntityHandle, UInt32) para agregar tantos recursos como sea necesario. Las secuencias deben concatenarse en un BlobBuilder que se pasa al argumento ManagedPEBuilder. En el ejemplo siguiente se muestra cómo crear recursos y adjuntarlos al ensamblado que se crea.

public static void SetResource()
{
    PersistedAssemblyBuilder ab = new(new AssemblyName("MyAssembly"), typeof(object).Assembly);
    ab.DefineDynamicModule("MyModule");
    MetadataBuilder metadata = ab.GenerateMetadata(out BlobBuilder ilStream, out _);

    using MemoryStream stream = new();
    ResourceWriter myResourceWriter = new(stream);
    myResourceWriter.AddResource("AddResource 1", "First added resource");
    myResourceWriter.AddResource("AddResource 2", "Second added resource");
    myResourceWriter.AddResource("AddResource 3", "Third added resource");
    myResourceWriter.Close();

    byte[] data = stream.ToArray();
    BlobBuilder resourceBlob = new();
    resourceBlob.WriteInt32(data.Length);
    resourceBlob.WriteBytes(data);

    metadata.AddManifestResource(
        ManifestResourceAttributes.Public,
        metadata.GetOrAddString("MyResource.resources"),
        implementation: default,
        offset: 0);        

    ManagedPEBuilder peBuilder = new(
                    header: PEHeaderBuilder.CreateLibraryHeader(),
                    metadataRootBuilder: new MetadataRootBuilder(metadata),
                    ilStream: ilStream,
                    managedResources: resourceBlob);

    BlobBuilder blob = new();
    peBuilder.Serialize(blob);

    // Create the assembly:
    using FileStream fileStream = new("MyAssemblyWithResource.dll", FileMode.Create, FileAccess.Write);
    blob.WriteContentTo(fileStream);
}

En el ejemplo siguiente se muestra cómo leer recursos del ensamblado creado.

public static void ReadResource()
{
    Assembly readAssembly = Assembly.LoadFile(Path.Combine(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
        "MyAssemblyWithResource.dll"));

    // Use ResourceManager.GetString() to read the resources.
    ResourceManager rm = new("MyResource", readAssembly);
    Console.WriteLine("Using ResourceManager.GetString():");
    Console.WriteLine($"{rm.GetString("AddResource 1", CultureInfo.InvariantCulture)}");
    Console.WriteLine($"{rm.GetString("AddResource 2", CultureInfo.InvariantCulture)}");
    Console.WriteLine($"{rm.GetString("AddResource 3", CultureInfo.InvariantCulture)}");

    // Use ResourceSet to enumerate the resources.
    Console.WriteLine();
    Console.WriteLine("Using ResourceSet:");
    ResourceSet resourceSet = rm.GetResourceSet(CultureInfo.InvariantCulture, createIfNotExists: true, tryParents: false);
    foreach (DictionaryEntry entry in resourceSet)
    {
        Console.WriteLine($"Key: {entry.Key}, Value: {entry.Value}");
    }

    // Use ResourceReader to enumerate the resources.
    Console.WriteLine();
    Console.WriteLine("Using ResourceReader:");
    using Stream stream = readAssembly.GetManifestResourceStream("MyResource.resources")!;
    using ResourceReader reader = new(stream);
    foreach (DictionaryEntry entry in reader)
    {
        Console.WriteLine($"Key: {entry.Key}, Value: {entry.Value}");
    }
}

Note

Los tokens de metadatos de todos los miembros se rellenan en la operación Save. No use los tokens de un tipo generado y sus miembros antes de haberlos guardado, ya que tendrán valores predeterminados o producirán excepciones. Es seguro usar tokens para tipos referenciados, no generados.

Algunas API que no son importantes para emitir un ensamblado no se implementan; por ejemplo, no se implementa GetCustomAttributes(). Con la implementación en tiempo de ejecución, fuiste capaz de usar esas APIs después de crear el tipo. Para el AssemblyBuilder persistente, inician NotSupportedException o NotImplementedException. Si tiene un escenario que requiere esas API, abra una incidencia en el repositorio dotnet/runtime.

Para obtener una manera alternativa de generar archivos de ensamblado, consulte MetadataBuilder.

Warning

PersistedAssemblyBuilder Las API requieren un entorno de plena confianza con entrada de confianza, similar a otras tecnologías, como los compiladores. No hay restricciones que no sean la validación básica para el AssemblyBuilder IL generado que puede contener. Esto incluye la validación del nombre de miembro, el recuento y los metadatos asociados, como los atributos personalizados.

Constructores

Nombre Description
PersistedAssemblyBuilder(AssemblyName, Assembly, IEnumerable<CustomAttributeBuilder>)

Crea una PersistedAssemblyBuilder instancia que se puede guardar en un archivo o secuencia.

Propiedades

Nombre Description
CodeBase
Obsoletos.

Obtiene la ubicación del ensamblado, tal como se especificó originalmente (por ejemplo, en un AssemblyName objeto ).

(Heredado de AssemblyBuilder)
CustomAttributes

Obtiene una colección que contiene los atributos personalizados de este ensamblado.

(Heredado de Assembly)
EntryPoint

Devuelve el punto de entrada de este ensamblado.

(Heredado de AssemblyBuilder)
EscapedCodeBase
Obsoletos.
Obsoletos.

Obtiene el URI, incluidos los caracteres de escape, que representa el código base.

(Heredado de Assembly)
ExportedTypes

Obtiene una colección de los tipos públicos definidos en este ensamblado que están visibles fuera del ensamblado.

(Heredado de Assembly)
FullName

Obtiene el nombre para mostrar del ensamblado dinámico actual.

HostContext

Obtiene el contexto de host donde se crea el ensamblado dinámico.

(Heredado de AssemblyBuilder)
IsCollectible

Obtiene un valor que indica si este ensamblado dinámico se mantiene en un objeto recopilable AssemblyLoadContext.

(Heredado de AssemblyBuilder)
IsDynamic

Obtiene un valor que indica que el ensamblado actual es un ensamblado dinámico.

(Heredado de AssemblyBuilder)
IsFullyTrusted

Obtiene un valor que indica si el ensamblado actual se carga con plena confianza.

(Heredado de Assembly)
Location

Obtiene la ubicación, en formato de código base, del archivo cargado que contiene el manifiesto si no se copia en la sombra.

(Heredado de AssemblyBuilder)
ManifestModule

Obtiene el módulo en el actual PersistedAssemblyBuilder que contiene el manifiesto del ensamblado.

ReflectionOnly

Obtiene un valor que indica si el ensamblado dinámico está en el contexto de solo reflexión.

(Heredado de AssemblyBuilder)

Métodos

Nombre Description
CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Busca el tipo especificado de este ensamblado y crea una instancia de él mediante el activador del sistema, con una búsqueda opcional que distingue mayúsculas de minúsculas y tiene la referencia cultural, los argumentos y los atributos de enlace y activación especificados.

(Heredado de Assembly)
CreateInstance(String, Boolean)

Busca el tipo especificado de este ensamblado y crea una instancia de él mediante el activador del sistema, con búsqueda opcional con distinción entre mayúsculas y minúsculas.

(Heredado de Assembly)
CreateInstance(String)

Busca el tipo especificado de este ensamblado y crea una instancia de él mediante el activador del sistema, mediante la búsqueda con distinción entre mayúsculas y minúsculas.

(Heredado de Assembly)
DefineDynamicModule(String)

Define un módulo dinámico transitorio con nombre en este ensamblado.

(Heredado de AssemblyBuilder)
DefineDynamicModuleCore(String)

Cuando se reemplaza en una clase derivada, define un módulo dinámico en este ensamblado.

(Heredado de AssemblyBuilder)
Equals(Object)

Devuelve un valor que indica si esta instancia es igual al objeto especificado.

(Heredado de AssemblyBuilder)
GenerateMetadata(BlobBuilder, BlobBuilder, MetadataBuilder)

Genera los metadatos de PersistedAssemblyBuilder.

GenerateMetadata(BlobBuilder, BlobBuilder)

Genera los metadatos de PersistedAssemblyBuilder.

GetCustomAttributes(Boolean)

Devuelve todos los atributos personalizados que se han aplicado al objeto actual AssemblyBuilder.

(Heredado de AssemblyBuilder)
GetCustomAttributes(Type, Boolean)

Devuelve todos los atributos personalizados que se han aplicado al objeto actual AssemblyBuildery que derivan de un tipo de atributo especificado.

(Heredado de AssemblyBuilder)
GetCustomAttributesData()

Devuelve CustomAttributeData objetos que contienen información sobre los atributos que se han aplicado al objeto actual AssemblyBuilder.

(Heredado de AssemblyBuilder)
GetDynamicModule(String)

Devuelve el módulo dinámico con el nombre especificado.

(Heredado de AssemblyBuilder)
GetDynamicModuleCore(String)

Cuando se invalida en una clase derivada, devuelve el módulo dinámico con el nombre especificado.

(Heredado de AssemblyBuilder)
GetExportedTypes()

Obtiene los tipos exportados definidos en este ensamblado.

(Heredado de AssemblyBuilder)
GetFile(String)

Obtiene un FileStream para el archivo especificado en la tabla de archivos del manifiesto de este ensamblado.

(Heredado de AssemblyBuilder)
GetFiles()

Obtiene los archivos de la tabla de archivos de un manifiesto de ensamblado.

(Heredado de Assembly)
GetFiles(Boolean)

Obtiene los archivos de la tabla de archivos de un manifiesto de ensamblado, especificando si se van a incluir módulos de recursos.

(Heredado de AssemblyBuilder)
GetForwardedTypes()

Proporciona una implementación de AssemblyBuilder que puede conservar un ensamblado en un disco o secuencia.

(Heredado de Assembly)
GetHashCode()

Devuelve el código hash de esta instancia.

(Heredado de AssemblyBuilder)
GetLoadedModules()

Obtiene todos los módulos cargados que forman parte de este ensamblado.

(Heredado de Assembly)
GetLoadedModules(Boolean)

Devuelve todos los módulos cargados que forman parte de este ensamblado y, opcionalmente, incluye módulos de recursos.

(Heredado de AssemblyBuilder)
GetManifestResourceInfo(String)

Devuelve información sobre cómo se ha conservado el recurso especificado.

(Heredado de AssemblyBuilder)
GetManifestResourceNames()

Carga el recurso de manifiesto especificado de este ensamblado.

(Heredado de AssemblyBuilder)
GetManifestResourceStream(String)

Carga el recurso de manifiesto especificado de este ensamblado.

(Heredado de AssemblyBuilder)
GetManifestResourceStream(Type, String)

Carga el recurso de manifiesto especificado, con ámbito por el espacio de nombres del tipo especificado, desde este ensamblado.

(Heredado de AssemblyBuilder)
GetModule(String)

Obtiene el módulo especificado en este ensamblado.

(Heredado de AssemblyBuilder)
GetModules()

Obtiene todos los módulos que forman parte de este ensamblado.

(Heredado de Assembly)
GetModules(Boolean)

Obtiene todos los módulos que forman parte de este ensamblado y, opcionalmente, incluye módulos de recursos.

(Heredado de AssemblyBuilder)
GetName()

Obtiene un AssemblyName para este ensamblado.

(Heredado de Assembly)
GetName(Boolean)

Obtiene el AssemblyName objeto que se especificó cuando se creó el ensamblado dinámico actual.

GetObjectData(SerializationInfo, StreamingContext)
Obsoletos.

Obtiene información de serialización con todos los datos necesarios para volver a fundamentar este ensamblado.

(Heredado de Assembly)
GetReferencedAssemblies()

Obtiene una lista incompleta de AssemblyName objetos para los ensamblados a los que hace referencia este AssemblyBuilderobjeto .

(Heredado de AssemblyBuilder)
GetSatelliteAssembly(CultureInfo, Version)

Obtiene la versión especificada del ensamblado satélite para la referencia cultural especificada.

(Heredado de AssemblyBuilder)
GetSatelliteAssembly(CultureInfo)

Obtiene el ensamblado satélite de la referencia cultural especificada.

(Heredado de AssemblyBuilder)
GetType(String, Boolean, Boolean)

Obtiene el tipo especificado de los tipos definidos y creados en el objeto actual AssemblyBuilder.

(Heredado de AssemblyBuilder)
GetType(String, Boolean)

Obtiene el Type objeto con el nombre especificado en la instancia de ensamblado y, opcionalmente, produce una excepción si no se encuentra el tipo.

(Heredado de Assembly)
GetType(String)

Obtiene el Type objeto con el nombre especificado en la instancia de ensamblado.

(Heredado de Assembly)
GetTypes()

Obtiene todos los tipos definidos en este ensamblado.

(Heredado de Assembly)
IsDefined(Type, Boolean)

Devuelve un valor que indica si se aplica una o varias instancias del tipo de atributo especificado a este miembro.

(Heredado de AssemblyBuilder)
LoadModule(String, Byte[], Byte[])

Carga el módulo, interno en este ensamblado, con una imagen basada en formato de archivo de objeto común (COFF) que contiene un módulo emitido o un archivo de recursos. Los bytes sin procesar que representan los símbolos del módulo también se cargan.

(Heredado de Assembly)
LoadModule(String, Byte[])

Carga el módulo, interno en este ensamblado, con una imagen basada en formato de archivo de objeto común (COFF) que contiene un módulo emitido o un archivo de recursos.

(Heredado de Assembly)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
Save(Stream)

Serializa el ensamblado en la secuencia especificada.

Save(String)

Guarda el ensamblado en el disco.

SetCustomAttribute(ConstructorInfo, Byte[])

Establezca un atributo personalizado en este ensamblado mediante un blob de atributo personalizado especificado.

(Heredado de AssemblyBuilder)
SetCustomAttribute(CustomAttributeBuilder)

Establezca un atributo personalizado en este ensamblado mediante un generador de atributos personalizado.

(Heredado de AssemblyBuilder)
SetCustomAttributeCore(ConstructorInfo, ReadOnlySpan<Byte>)

Cuando se invalida en una clase derivada, establece un atributo personalizado en este ensamblado.

(Heredado de AssemblyBuilder)
ToString()

Devuelve el nombre completo del ensamblado, también conocido como nombre para mostrar.

(Heredado de Assembly)

Eventos

Nombre Description
ModuleResolve

Se produce cuando el cargador de clases de Common Language Runtime no puede resolver una referencia a un módulo interno de un ensamblado a través de medios normales.

(Heredado de Assembly)

Métodos de extensión

Nombre Description
GetCustomAttribute(Assembly, Type)

Recupera un atributo personalizado de un tipo especificado que se aplica a un ensamblado especificado.

GetCustomAttribute<T>(Assembly)

Recupera un atributo personalizado de un tipo especificado que se aplica a un ensamblado especificado.

GetCustomAttributes(Assembly, Type)

Recupera una colección de atributos personalizados de un tipo especificado que se aplica a un ensamblado especificado.

GetCustomAttributes(Assembly)

Recupera una colección de atributos personalizados que se aplican a un ensamblado especificado.

GetCustomAttributes<T>(Assembly)

Recupera una colección de atributos personalizados de un tipo especificado que se aplica a un ensamblado especificado.

GetExportedTypes(Assembly)

Proporciona una implementación de AssemblyBuilder que puede conservar un ensamblado en un disco o secuencia.

GetModules(Assembly)

Proporciona una implementación de AssemblyBuilder que puede conservar un ensamblado en un disco o secuencia.

GetTypes(Assembly)

Proporciona una implementación de AssemblyBuilder que puede conservar un ensamblado en un disco o secuencia.

IsDefined(Assembly, Type)

Indica si los atributos personalizados de un tipo especificado se aplican a un ensamblado especificado.

TryGetRawMetadata(Assembly, Byte*, Int32)

Recupera la sección de metadatos del ensamblado para su uso con MetadataReader.

Se aplica a