Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método AppDomain.DefineDynamicAssembly (AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)

 

Publicado: octubre de 2016

Define un ensamblado dinámico con el nombre especificado, el modo de acceso y los atributos personalizados.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

public AssemblyBuilder DefineDynamicAssembly(
	AssemblyName name,
	AssemblyBuilderAccess access,
	IEnumerable<CustomAttributeBuilder> assemblyAttributes
)

Parámetros

name
Type: System.Reflection.AssemblyName

Identidad única del ensamblado dinámico.

access
Type: System.Reflection.Emit.AssemblyBuilderAccess

Modo de acceso del ensamblado dinámico.

assemblyAttributes
Type: System.Collections.Generic.IEnumerable<CustomAttributeBuilder>

Lista enumerable de atributos que se va a aplicarse al ensamblado o null si no hay ningún atributo.

Valor devuelto

Type: System.Reflection.Emit.AssemblyBuilder

Ensamblado dinámico con el nombre y las características especificados.

Exception Condition
ArgumentNullException

El valor de name es null.

ArgumentException

La propiedad Name de name es null.

O bien

El Name propiedad de name empieza por un espacio en blanco o contiene una barra diagonal hacia delante o hacia atrás.

AppDomainUnloadedException

La operación se intenta en un dominio de aplicación descargado.

Utilice esta sobrecarga del método para especificar atributos que no funcionan correctamente a menos que se aplican cuando se crea un ensamblado dinámico. Por ejemplo, atributos de seguridad como SecurityTransparentAttribute y SecurityCriticalAttribute no funcionan correctamente si se agregan una vez creado un ensamblado dinámico.

Este método debe utilizarse únicamente para definir un ensamblado dinámico en el dominio de aplicación actual. Para obtener más información acerca de esta restricción, consulte el Load(AssemblyName) sobrecarga del método.

Esta sobrecarga del método se introdujo en la .NET Framework 3.5.

El ejemplo de código siguiente muestra cómo crear un ensamblado dinámico que tiene el SecurityTransparentAttribute. El atributo debe especificarse como un elemento de una matriz de CustomAttributeBuilder objetos.

El primer paso para crear el CustomAttributeBuilder es obtener un constructor para el atributo. El constructor no tiene parámetros, por lo que la GetConstructor se invoca con una matriz vacía de Type objetos que representan los tipos de los parámetros. El segundo paso es pasar resultante ConstructorInfo objeto al constructor de la CustomAttributeBuilder (clase), junto con una matriz vacía de tipo Object para representar los argumentos.

Resultante CustomAttributeBuilder se pasa a continuación el DefineDynamicAssembly método como el único elemento de una matriz.

El ejemplo de código define un módulo y un tipo en el nuevo ensamblado dinámico y, a continuación, muestra los atributos del ensamblado.

using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Security;

class Example
{
    static void Main()
    {
        // Create a CustomAttributeBuilder for the assembly attribute. 
        // 
        // SecurityTransparentAttribute has a parameterless constructor, 
        // which is retrieved by passing an array of empty types for the
        // constructor's parameter types. The CustomAttributeBuilder is 
        // then created by passing the ConstructorInfo and an empty array
        // of objects to represent the parameters.
        //
        ConstructorInfo transparentCtor = 
            typeof(SecurityTransparentAttribute).GetConstructor(
                Type.EmptyTypes);
        CustomAttributeBuilder transparent = new CustomAttributeBuilder(
            transparentCtor,
            new Object[] {} );

        // Create a dynamic assembly using the attribute. The attribute is
        // passed as an array with one element.
        AssemblyName aName = new AssemblyName("EmittedAssembly");
        AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly( 
            aName, 
            AssemblyBuilderAccess.Run,
            new CustomAttributeBuilder[] { transparent } );

        ModuleBuilder mb = ab.DefineDynamicModule( aName.Name );
        TypeBuilder tb = mb.DefineType( 
            "MyDynamicType", 
            TypeAttributes.Public );
        tb.CreateType();

        Console.WriteLine("{0}\nAssembly attributes:", ab);
        foreach (Attribute attr in ab.GetCustomAttributes(true))
        {
            Console.WriteLine("\t{0}", attr);
        }
    }
}

/* This code example produces the following output:

EmittedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Assembly attributes:
        System.Security.SecurityTransparentAttribute
 */

.NET Framework
Disponible desde 2.0
Volver al principio
Mostrar: