Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

AppDomain.DefineDynamicAssembly (Método) (AssemblyName, AssemblyBuilderAccess)

Define un ensamblado dinámico con el nombre y modo de acceso especificados.

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

public AssemblyBuilder DefineDynamicAssembly(
	AssemblyName name,
	AssemblyBuilderAccess access
)

Parámetros

name
Tipo: System.Reflection.AssemblyName
Identidad única del ensamblado dinámico.
access
Tipo: System.Reflection.Emit.AssemblyBuilderAccess
Modo de acceso del ensamblado dinámico.

Valor devuelto

Tipo: System.Reflection.Emit.AssemblyBuilder
Un ensamblado dinámico con el nombre y modo de acceso especificados.

Implementaciones

_AppDomain.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)

ExcepciónCondición
ArgumentNullException

name es null.

ArgumentException

La propiedad Name de name es null.

O bien

La propiedad Name de name empieza con un espacio en blanco o contiene una barra diagonal o una barra diagonal inversa.

AppDomainUnloadedException

Se ha intentado realizar la operación en un dominio de aplicación descargado.

Este método sólo debe utilizarse para definir un ensamblado dinámico en el dominio de aplicación actual. Para obtener más información, vea la sobrecarga del método Load(AssemblyName).

NotaNota

Durante el desarrollo de código que emite ensamblados dinámicos, se recomienda utilizar una sobrecarga del método DefineDynamicAssembly que especifique evidencia y permisos, proporcionar la evidencia que se desee que tenga el ensamblado dinámico e incluir SecurityPermissionFlag.SkipVerification en refusedPermissions. La inclusión de SkipVerification en el parámetro refusedPermissions garantiza la comprobación de MSIL. Una limitación de esta técnica es que provoca también el inicio de SecurityException cuando se utiliza con código que exige plena confianza.

En el siguiente ejemplo se muestra el método DefineDynamicAssembly y el evento AssemblyResolve.

Para que este código de ejemplo se ejecute, debe proporcionar el nombre completo del ensamblado. Para obtener información acerca de cómo obtener el nombre completo del ensamblado, vea Nombres de ensamblado.


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

class Test {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyDynamicType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

      InstantiateMyDynamicType(currentDomain);   // OK!
   }

   static void InstantiateMyDynamicType(AppDomain domain) {
      try {
         // You must supply a valid fully qualified assembly name here. 
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }   

   static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
      return DefineDynamicAssembly((AppDomain) sender);
   }

   static Assembly DefineDynamicAssembly(AppDomain domain) {
      // Build a dynamic assembly using Reflection Emit API.

      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyDynamicAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule");
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public);
      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();

      ilGenerator.EmitWriteLine("MyDynamicType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      return assemblyBuilder;
   }
}


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft