¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
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, Evidence)

Nota: esta API ya está obsoleta. La alternativa no obsoleta es DefineDynamicAssembly.

Define un ensamblado dinámico utilizando el nombre especificado, el modo de acceso y la evidencia.

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

[ObsoleteAttribute("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public AssemblyBuilder DefineDynamicAssembly(
	AssemblyName name,
	AssemblyBuilderAccess access,
	Evidence evidence
)

Parámetros

name
Tipo: System.Reflection.AssemblyName
Identidad única del ensamblado dinámico.
access
Tipo: System.Reflection.Emit.AssemblyBuilderAccess
Modo de acceso al ensamblado dinámico.
evidence
Tipo: System.Security.Policy.Evidence
Evidencia suministrada para el ensamblado dinámico. La evidencia se utiliza sin modificaciones como conjunto final de evidencia para la resolución de directivas.

Valor devuelto

Tipo: System.Reflection.Emit.AssemblyBuilder
Un ensamblado dinámico con el nombre y las características especificados.

Implementaciones

_AppDomain.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence)

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.

A la hora de definir un objeto Assembly dinámico, sólo los llamadores de plena confianza pueden suministrar su evidencia evidence. El motor en tiempo de ejecución asignará Evidence mediante la directiva de seguridad para determinar los permisos concedidos. Los llamadores de confianza parcial deben suministrar un valor de evidence que sea null. Si evidence es null, el motor en tiempo de ejecución copia los conjuntos de permisos, es decir, los conjuntos actuales de permisos concedidos y rechazados, del Assembly del llamador al Assembly dinámico que se ha definido, y marca la directiva como resuelta.

Si el Assembly dinámico se guarda en el disco, las operaciones de carga posteriores darán como resultado la obtención de concesiones que se basan en las directivas asociadas a la ubicación en la que se guardó el Assembly.

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 uso del método DefineDynamicAssembly y del evento AssemblyResolve.

Primero, el ejemplo de código intenta crear una instancia de MyDynamicType llamando al método CreateInstance con un nombre de ensamblado no válido y detecta la excepción resultante.

En el ejemplo de código se agrega a continuación un controlador de eventos para el evento AssemblyResolve y de nuevo se intenta crear una instancia de MyDynamicType. Durante la llamada a CreateInstance, se provoca el evento AssemblyResolve para el ensamblado no válido. El controlador de eventos crea un ensamblado dinámico que contiene un tipo denominado MyDynamicType, da al tipo un constructor sin parámetros y devuelve el nuevo ensamblado dinámico. La llamada a CreateInstance finaliza a continuación correctamente y el constructor para MyDynamicType mostrar un mensaje en la consola.


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: 3.5, 3.0, 2.0, 1.1, 1.0
Obsoleto (advertencia del compilador) en 4.5.2
Obsoleto (advertencia del compilador) en 4.5.1
Obsoleto (advertencia del compilador) en 4.5
Obsoleto (advertencia del compilador) en 4

.NET Framework Client Profile

Compatible con: 3.5 SP1
Obsoleto (advertencia del compilador) en 4

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:
© 2015 Microsoft