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, String, PermissionSet, PermissionSet, PermissionSet)

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, el directorio de almacenamiento y las solicitudes de permiso.

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,
	string dir,
	PermissionSet requiredPermissions,
	PermissionSet optionalPermissions,
	PermissionSet refusedPermissions
)

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.
dir
Tipo: System.String
Nombre del directorio donde se guardará el ensamblado. Si dir es null, el directorio predeterminado es el directorio actual.
requiredPermissions
Tipo: System.Security.PermissionSet
Solicitud de permisos requeridos.
optionalPermissions
Tipo: System.Security.PermissionSet
Solicitud de permisos opcionales.
refusedPermissions
Tipo: System.Security.PermissionSet
Solicitud de permisos rechazados.

Valor devuelto

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

Implementaciones

_AppDomain.DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, PermissionSet, PermissionSet, PermissionSet)

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.

Las solicitudes de permisos especificadas para requiredPermissions, optionalPermissions y refusedPermissions no se usan a menos que se haya guardado el ensamblado dinámico y se haya vuelto a cargar en memoria. Para especificar solicitudes de permisos para un ensamblado transitorio que nunca se guarda en disco, utilice una sobrecarga del método DefineDynamicAssembly que especifique la evidencia y los permisos solicitados y que, además, proporcione un objeto Evidence.

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.

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

En las versiones 1.0, 1.1 y 2.0 de .NET Framework, los atributos de seguridad declarativa aplicados a un ensamblado dinámico mediante los parámetros requiredPermissions, optionalPermissions y refusedPermissions se almacenan en el formato de metadatos XML antiguo. Vea Emitir atributos de seguridad declarativa.

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