AppDomain.DefineDynamicAssembly Método

Definição

Define um assembly dinâmico no domínio do aplicativo atual.Defines a dynamic assembly in the current application domain.

Sobrecargas

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable<CustomAttributeBuilder>)

Define um assembly dinâmico com o nome, o modo de acesso, o diretório de armazenamento, a evidência, as solicitações de permissão, a opção de sincronização e os atributos personalizados especificados.Defines a dynamic assembly with the specified name, access mode, storage directory, evidence, permission requests, synchronization option, and custom attributes.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean)

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento, a evidência, as solicitações de permissão e a opção de sincronização especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, permission requests, and synchronization option.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet)

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento, a evidência e as solicitações de permissão especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, and permission requests.

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

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento e as solicitações de permissão especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, and permission requests.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet)

Define um assembly dinâmico usando o nome, o modo de acesso, a evidência e as solicitações de permissão especificados.Defines a dynamic assembly using the specified name, access mode, evidence, and permission requests.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable<CustomAttributeBuilder>)

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento e a opção de sincronização especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, and synchronization option.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)

Define um assembly dinâmico usando o nome, o modo de acesso e as solicitações de permissão especificados.Defines a dynamic assembly using the specified name, access mode, and permission requests.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence)

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento e a evidência especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, and evidence.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>, SecurityContextSource)

Define um assembly dinâmico com o nome, o modo de acesso e os atributos personalizados especificados e usando a origem especificada para o seu contexto de segurança.Defines a dynamic assembly with the specified name, access mode, and custom attributes, and using the specified source for its security context.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)

Define um assembly dinâmico usando o nome, o modo de acesso e o diretório de armazenamento especificados.Defines a dynamic assembly using the specified name, access mode, and storage directory.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence)

Define um assembly dinâmico usando o nome, o modo de acesso e a evidência especificados.Defines a dynamic assembly using the specified name, access mode, and evidence.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)

Define um assembly dinâmico com o nome, o modo de acesso e os atributos personalizados especificados.Defines a dynamic assembly with the specified name, access mode, and custom attributes.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)

Define um assembly dinâmico com o nome e o modo de acesso especificados.Defines a dynamic assembly with the specified name and access mode.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean, IEnumerable<CustomAttributeBuilder>)

Aviso

Esta API agora é obsoleta.

Define um assembly dinâmico com o nome, o modo de acesso, o diretório de armazenamento, a evidência, as solicitações de permissão, a opção de sincronização e os atributos personalizados especificados.Defines a dynamic assembly with the specified name, access mode, storage directory, evidence, permission requests, synchronization option, and custom attributes.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::Policy::Evidence ^ evidence, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions, bool isSynchronized, System::Collections::Generic::IEnumerable<System::Reflection::Emit::CustomAttributeBuilder ^> ^ assemblyAttributes);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, bool isSynchronized, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.Policy.Evidence * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet * bool * seq<System.Reflection.Emit.CustomAttributeBuilder> -> System.Reflection.Emit.AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

dir
String

O nome do diretório no qual o assembly dinâmico será salvo.The name of the directory where the dynamic assembly will be saved. Se dir for null, o diretório atual será usado.If dir is null, the current directory is used.

evidence
Evidence

A evidência fornecida para o assembly dinâmico.The evidence that is supplied for the dynamic assembly. A evidência é usada inalterada como o conjunto final de evidências usado na resolução da política.The evidence is used unaltered as the final set of evidence used for policy resolution.

requiredPermissions
PermissionSet

A solicitação de permissões obrigatória.The required permissions request.

optionalPermissions
PermissionSet

A solicitação de permissões opcional.The optional permissions request.

refusedPermissions
PermissionSet

A solicitação de permissões recusada.The refused permissions request.

isSynchronized
Boolean

true para sincronizar a criação de módulos, tipos e membros no assembly dinâmico; caso contrário, false.true to synchronize the creation of modules, types, and members in the dynamic assembly; otherwise, false.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Uma lista de atributos enumeráveis a serem aplicados ao assembly ou null caso não haja nenhum atributo.An enumerable list of attributes to be applied to the assembly, or null if there are no attributes.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Atributos

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name starts with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Comentários

Use esta sobrecarga de método para especificar atributos que não funcionam corretamente, senão aplicados quando um assembly dinâmico é criado.Use this method overload to specify attributes that do not work correctly unless they are applied when a dynamic assembly is created. Por exemplo, os atributos de segurança como SecurityTransparentAttribute e SecurityCriticalAttribute não funcionam corretamente caso sejam adicionados após um assembly dinâmico ser criado.For example, security attributes such as SecurityTransparentAttribute and SecurityCriticalAttribute do not work correctly if they are added after a dynamic assembly has been created.

As solicitações de permissão especificadas para os parâmetros requiredPermissions, optionalPermissionse refusedPermissions serão usadas somente se o parâmetro evidence também for fornecido ou se o assembly dinâmico for salvo e recarregado na memória.The permission requests specified for the requiredPermissions, optionalPermissions, and refusedPermissions parameters are used only if the evidence parameter is also supplied, or if the dynamic assembly is saved and reloaded into memory.

Observação

Quando você desenvolve o código que emite assemblies dinâmicos, recomendamos que você inclua o sinalizador SecurityPermissionFlag.SkipVerification no parâmetro refusedPermissions.When you develop code that emits dynamic assemblies, we recommend that you include the SecurityPermissionFlag.SkipVerification flag in the refusedPermissions parameter. A inclusão desse sinalizador garante que a MSIL (Microsoft Intermediate Language) será verificada.The inclusion of this flag ensures that the Microsoft intermediate language (MSIL) will be verified. Essa técnica detectará a geração não intencional de código não verificável, que, de outra forma, é muito difícil de detectar.This technique will detect the unintentional generation of unverifiable code, which otherwise is very difficult to detect. Uma limitação dessa técnica é que ela também faz com que a SecurityException seja lançada quando usada com código que exige confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when it is used with code that demands full trust.

Somente chamadores totalmente confiáveis podem fornecer evidências ao definir um Assemblydinâmico.Only fully trusted callers can supply evidence when defining a dynamic Assembly. O tempo de execução mapeia o Evidence por meio da política de segurança para determinar as permissões concedidas.The runtime maps the Evidence through the security policy to determine the granted permissions. Chamadores parcialmente confiáveis devem fornecer null para o parâmetro evidence.Partially trusted callers must supply null for the evidence parameter. Se evidence for null, o tempo de execução copiará os conjuntos de permissões (ou seja, os conjuntos Grant e Deny atuais) do assembly do chamador para o assembly dinâmico que está sendo definido e marcará a política como resolvida.If evidence is null, the runtime copies the permission sets (that is, the current grant and deny sets) from the caller's assembly to the dynamic assembly that is being defined, and marks the policy as resolved.

Se o assembly dinâmico for salvo em disco, as cargas subsequentes serão concedidas com base nas políticas associadas ao local em que o assembly dinâmico foi salvo.If the dynamic assembly is saved to disk, subsequent loads will get grants based on policies that are associated with the location where the dynamic assembly was saved.

Se isSynchronized for true, os seguintes métodos do AssemblyBuilder resultante serão sincronizados: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPointe Save.If isSynchronized is true, the following methods of the resulting AssemblyBuilder will be synchronized: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPoint, and Save. Se dois desses métodos forem chamados em threads diferentes, um será bloqueado até que o outro seja concluído.If two of these methods are called on different threads, one will block until the other is completed.

Essa sobrecarga de método é introduzida no .NET Framework 3,5.NET Framework 3.5.This method overload is introduced in the .NET Framework 3,5.NET Framework 3.5.

Segurança

SecurityPermission
para carregar um assembly com evidências.to load an assembly with evidence. Enumeração associada: ControlEvidence.Associated enumeration: ControlEvidence.

Veja também

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet, Boolean)

Aviso

Esta API agora é obsoleta.

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento, a evidência, as solicitações de permissão e a opção de sincronização especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, permission requests, and synchronization option.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::Policy::Evidence ^ evidence, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions, bool isSynchronized);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, bool isSynchronized);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.Policy.Evidence * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet * bool -> System.Reflection.Emit.AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

dir
String

O nome do diretório no qual o assembly dinâmico será salvo.The name of the directory where the dynamic assembly will be saved. Caso dir seja null, o diretório usa como padrão o diretório atual.If dir is null, the directory defaults to the current directory.

evidence
Evidence

A evidência fornecida para o assembly dinâmico.The evidence supplied for the dynamic assembly. A evidência é usada inalterada como o conjunto final de evidências usado na resolução da política.The evidence is used unaltered as the final set of evidence used for policy resolution.

requiredPermissions
PermissionSet

A solicitação de permissões obrigatória.The required permissions request.

optionalPermissions
PermissionSet

A solicitação de permissões opcional.The optional permissions request.

refusedPermissions
PermissionSet

A solicitação de permissões recusada.The refused permissions request.

isSynchronized
Boolean

true para sincronizar a criação de módulos, tipos e membros no assembly dinâmico; caso contrário, false.true to synchronize the creation of modules, types, and members in the dynamic assembly; otherwise, false.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Implementações

Atributos

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Para este exemplo de código ser executado, você deve fornecer o nome de assembly totalmente qualificado.For this code example to run, you must provide the fully qualified assembly name. Para obter informações sobre como obter o nome totalmente qualificado do assembly, consulte nomes de assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

As solicitações de permissão especificadas para requiredPermissions, optionalPermissionse refusedPermissions serão usadas somente se evidence também for fornecido ou se o assembly dinâmico for salvo e recarregado na memória.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are used only if evidence is also supplied, or if the dynamic assembly is saved and reloaded into memory.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável que você inclua SecurityPermissionFlag.SkipVerification no refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Somente chamadores totalmente confiáveis podem fornecer suas evidências ao definir um Assemblydinâmico.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. O runtime mapeará Evidence pela política de segurança para determinar as permissões concedidas.The runtime will map the Evidence through the security policy to determine the granted permissions. Chamadores parcialmente confiáveis devem fornecer null para o parâmetro evidence.Partially trusted callers must supply null for the evidence parameter. Caso evidence seja null, o runtime copia os conjuntos de permissões, ou seja, os conjuntos de concessões e negações, do Assembly do chamador para o Assembly dinâmico definido e marca a política como resolvida.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Se o Assembly dinâmico for salvo em disco, os carregamentos subsequentes obterão concessões com base em políticas associadas ao local no qual o Assembly foi salvo.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Se isSynchronized for true, os seguintes métodos do AssemblyBuilder resultante serão sincronizados: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPointe Save.If isSynchronized is true, the following methods of the resulting AssemblyBuilder will be synchronized: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPoint, and Save. Se dois desses métodos forem chamados em threads diferentes, um será bloqueado até que o outro seja concluído.If two of these methods are called on different threads, one will block until the other completes.

Segurança

SecurityPermission
para carregar um assembly com evidências.to load an assembly with evidence. Enumeração associada: ControlEvidence.Associated enumeration: ControlEvidence.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence, PermissionSet, PermissionSet, PermissionSet)

Aviso

Esta API agora é obsoleta.

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento, a evidência e as solicitações de permissão especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, evidence, and permission requests.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::Policy::Evidence ^ evidence, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  Please see https://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.Policy.Evidence * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet -> System.Reflection.Emit.AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

dir
String

O nome do diretório onde o assembly será salvo.The name of the directory where the assembly will be saved. Caso dir seja null, o diretório usa como padrão o diretório atual.If dir is null, the directory defaults to the current directory.

evidence
Evidence

A evidência fornecida para o assembly dinâmico.The evidence supplied for the dynamic assembly. A evidência é usada inalterada como o conjunto final de evidências usado na resolução da política.The evidence is used unaltered as the final set of evidence used for policy resolution.

requiredPermissions
PermissionSet

A solicitação de permissões obrigatória.The required permissions request.

optionalPermissions
PermissionSet

A solicitação de permissões opcional.The optional permissions request.

refusedPermissions
PermissionSet

A solicitação de permissões recusada.The refused permissions request.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Implementações

Atributos

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Para este exemplo de código ser executado, você deve fornecer o nome de assembly totalmente qualificado.For this code example to run, you must provide the fully qualified assembly name. Para obter informações sobre como obter o nome totalmente qualificado do assembly, consulte nomes de assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

As solicitações de permissão especificadas para requiredPermissions, optionalPermissionse refusedPermissions serão usadas somente se evidence também for fornecido ou se o assembly dinâmico for salvo e recarregado na memória.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are used only if evidence is also supplied, or if the dynamic assembly is saved and reloaded into memory.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável que você inclua SecurityPermissionFlag.SkipVerification no refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Apenas chamadores totalmente confiáveis podem fornecer evidence ao definir um Assembly dinâmico.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. O runtime mapeará Evidence pela política de segurança para determinar as permissões concedidas.The runtime will map the Evidence through the security policy to determine the granted permissions. Os chamadores parcialmente confiáveis devem fornecer um evidencenulo.Partially trusted callers must supply a null evidence. Caso evidence seja null, o runtime copia os conjuntos de permissões, ou seja, os conjuntos de concessões e negações, do Assembly do chamador para o Assembly dinâmico definido e marca a política como resolvida.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Se o Assembly dinâmico for salvo em disco, os carregamentos subsequentes obterão concessões com base em políticas associadas ao local no qual o Assembly foi salvo.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Este método só deve ser usado para definir um assembly dinâmico no domínio de aplicativo atual.This method should only be used to define a dynamic assembly in the current application domain. Para obter mais informações, consulte a sobrecarga de método Load(AssemblyName).For more information, see the Load(AssemblyName) method overload.

Segurança

SecurityPermission
para carregar um assembly com evidências.to load an assembly with evidence. Enumeração associada: ControlEvidence.Associated enumeration: ControlEvidence.

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

Aviso

Esta API agora é obsoleta.

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento e as solicitações de permissão especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, and permission requests.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, dir As String, requiredPermissions As PermissionSet, optionalPermissions As PermissionSet, refusedPermissions As PermissionSet) As AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

dir
String

O nome do diretório onde o assembly será salvo.The name of the directory where the assembly will be saved. Caso dir seja null, o diretório usa como padrão o diretório atual.If dir is null, the directory defaults to the current directory.

requiredPermissions
PermissionSet

A solicitação de permissões obrigatória.The required permissions request.

optionalPermissions
PermissionSet

A solicitação de permissões opcional.The optional permissions request.

refusedPermissions
PermissionSet

A solicitação de permissões recusada.The refused permissions request.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Implementações

Atributos

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Para este exemplo de código ser executado, você deve fornecer o nome de assembly totalmente qualificado.For this code example to run, you must provide the fully qualified assembly name. Para obter informações sobre como obter o nome totalmente qualificado do assembly, consulte nomes de assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

As solicitações de permissão especificadas para requiredPermissions, optionalPermissionse refusedPermissions não são usadas, a menos que o assembly dinâmico tenha sido salvo e recarregado na memória.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are not used unless the dynamic assembly has been saved and reloaded into memory. Para especificar solicitações de permissão para um assembly transitório que nunca é salvo em disco, use uma sobrecarga do método DefineDynamicAssembly que especifica evidências, bem como as permissões solicitadas, e forneça um objeto Evidence.To specify permission requests for a transient assembly that is never saved to disk, use an overload of the DefineDynamicAssembly method that specifies evidence as well as requested permissions, and supply an Evidence object.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável usar uma sobrecarga do método DefineDynamicAssembly que especifica evidência e permissões, fornecer a evidência que você deseja que o assembly dinâmico tenha e incluir SecurityPermissionFlag.SkipVerification em refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Este método só deve ser usado para definir um assembly dinâmico no domínio de aplicativo atual.This method should only be used to define a dynamic assembly in the current application domain. Para obter mais informações, consulte a sobrecarga de método Load(AssemblyName).For more information, see the Load(AssemblyName) method overload.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence, PermissionSet, PermissionSet, PermissionSet)

Aviso

Esta API agora é obsoleta.

Define um assembly dinâmico usando o nome, o modo de acesso, a evidência e as solicitações de permissão especificados.Defines a dynamic assembly using the specified name, access mode, evidence, and permission requests.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::Security::Policy::Evidence ^ evidence, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * System.Security.Policy.Evidence * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet -> System.Reflection.Emit.AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

evidence
Evidence

A evidência fornecida para o assembly dinâmico.The evidence supplied for the dynamic assembly. A evidência é usada inalterada como o conjunto final de evidências usado na resolução da política.The evidence is used unaltered as the final set of evidence used for policy resolution.

requiredPermissions
PermissionSet

A solicitação de permissões obrigatória.The required permissions request.

optionalPermissions
PermissionSet

A solicitação de permissões opcional.The optional permissions request.

refusedPermissions
PermissionSet

A solicitação de permissões recusada.The refused permissions request.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Implementações

Atributos

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Para este exemplo de código ser executado, você deve fornecer o nome de assembly totalmente qualificado.For this code example to run, you must provide the fully qualified assembly name. Para obter informações sobre como obter o nome totalmente qualificado do assembly, consulte nomes de assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

As solicitações de permissão especificadas para requiredPermissions, optionalPermissionse refusedPermissions serão usadas somente se evidence também for fornecido ou se o assembly dinâmico for salvo e recarregado na memória.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are used only if evidence is also supplied, or if the dynamic assembly is saved and reloaded into memory.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável que você inclua SecurityPermissionFlag.SkipVerification no refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Apenas chamadores totalmente confiáveis podem fornecer evidence ao definir um Assembly dinâmico.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. O runtime mapeará Evidence pela política de segurança para determinar as permissões concedidas.The runtime will map the Evidence through the security policy to determine the granted permissions. Os chamadores parcialmente confiáveis devem fornecer um evidencenulo.Partially trusted callers must supply a null evidence. Caso evidence seja null, o runtime copia os conjuntos de permissões, ou seja, os conjuntos de concessões e negações, do Assembly do chamador para o Assembly dinâmico definido e marca a política como resolvida.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Se o Assembly dinâmico for salvo em disco, os carregamentos subsequentes obterão concessões com base em políticas associadas ao local no qual o Assembly foi salvo.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Este método só deve ser usado para definir um assembly dinâmico no domínio de aplicativo atual.This method should only be used to define a dynamic assembly in the current application domain. Para obter mais informações, consulte a sobrecarga de método Load(AssemblyName).For more information, see the Load(AssemblyName) method overload.

Segurança

SecurityPermission
para carregar um assembly com evidências.to load an assembly with evidence. Enumeração associada: ControlEvidence.Associated enumeration: ControlEvidence.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Boolean, IEnumerable<CustomAttributeBuilder>)

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento e a opção de sincronização especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, and synchronization option.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, bool isSynchronized, System::Collections::Generic::IEnumerable<System::Reflection::Emit::CustomAttributeBuilder ^> ^ assemblyAttributes);
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, bool isSynchronized, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * bool * seq<System.Reflection.Emit.CustomAttributeBuilder> -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, dir As String, isSynchronized As Boolean, assemblyAttributes As IEnumerable(Of CustomAttributeBuilder)) As AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

dir
String

O nome do diretório no qual o assembly dinâmico será salvo.The name of the directory where the dynamic assembly will be saved. Se dir for null, o diretório atual será usado.If dir is null, the current directory is used.

isSynchronized
Boolean

true para sincronizar a criação de módulos, tipos e membros no assembly dinâmico; caso contrário, false.true to synchronize the creation of modules, types, and members in the dynamic assembly; otherwise, false.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Uma lista de atributos enumeráveis a serem aplicados ao assembly ou null caso não haja nenhum atributo.An enumerable list of attributes to be applied to the assembly, or null if there are no attributes.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name starts with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Comentários

Use esta sobrecarga de método para especificar atributos que não funcionam corretamente, senão aplicados quando um assembly dinâmico é criado.Use this method overload to specify attributes that do not work correctly unless they are applied when a dynamic assembly is created. Por exemplo, os atributos de segurança como SecurityTransparentAttribute e SecurityCriticalAttribute não funcionam corretamente caso sejam adicionados após um assembly dinâmico ser criado.For example, security attributes such as SecurityTransparentAttribute and SecurityCriticalAttribute do not work correctly if they are added after a dynamic assembly has been created.

Se isSynchronized for true, os seguintes métodos do AssemblyBuilder resultante serão sincronizados: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPointe Save.If isSynchronized is true, the following methods of the resulting AssemblyBuilder will be synchronized: DefineDynamicModule, DefineResource, AddResourceFile, GetDynamicModule, SetEntryPoint, and Save. Se dois desses métodos forem chamados em threads diferentes, um será bloqueado até que o outro seja concluído.If two of these methods are called on different threads, one will block until the other is completed.

Veja também

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, PermissionSet, PermissionSet, PermissionSet)

Aviso

Esta API agora é obsoleta.

Define um assembly dinâmico usando o nome, o modo de acesso e as solicitações de permissão especificados.Defines a dynamic assembly using the specified name, access mode, and permission requests.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::Security::PermissionSet ^ requiredPermissions, System::Security::PermissionSet ^ optionalPermissions, System::Security::PermissionSet ^ refusedPermissions);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * System.Security.PermissionSet * System.Security.PermissionSet * System.Security.PermissionSet -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, requiredPermissions As PermissionSet, optionalPermissions As PermissionSet, refusedPermissions As PermissionSet) As AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

requiredPermissions
PermissionSet

A solicitação de permissões obrigatória.The required permissions request.

optionalPermissions
PermissionSet

A solicitação de permissões opcional.The optional permissions request.

refusedPermissions
PermissionSet

A solicitação de permissões recusada.The refused permissions request.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Implementações

Atributos

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Para este exemplo de código ser executado, você deve fornecer o nome de assembly totalmente qualificado.For this code example to run, you must provide the fully qualified assembly name. Para obter informações sobre como obter o nome totalmente qualificado do assembly, consulte nomes de assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

As solicitações de permissão especificadas para requiredPermissions, optionalPermissionse refusedPermissions não são usadas, a menos que o assembly dinâmico tenha sido salvo e recarregado na memória.The permission requests specified for requiredPermissions, optionalPermissions, and refusedPermissions are not used unless the dynamic assembly has been saved and reloaded into memory. Para especificar solicitações de permissão para um assembly transitório que nunca é salvo em disco, use uma sobrecarga do método DefineDynamicAssembly que especifica evidências, bem como as permissões solicitadas, e forneça um objeto Evidence.To specify permission requests for a transient assembly that is never saved to disk, use an overload of the DefineDynamicAssembly method that specifies evidence as well as requested permissions, and supply an Evidence object.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável usar uma sobrecarga do método DefineDynamicAssembly que especifica evidência e permissões, fornecer a evidência que você deseja que o assembly dinâmico tenha e incluir SecurityPermissionFlag.SkipVerification em refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Este método só deve ser usado para definir um assembly dinâmico no domínio de aplicativo atual.This method should only be used to define a dynamic assembly in the current application domain. Para obter mais informações, consulte a sobrecarga do método de Load(AssemblyName).For more information, see the Load(AssemblyName) method overload .

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String, Evidence)

Aviso

Esta API agora é obsoleta.

Define um assembly dinâmico usando o nome, o modo de acesso, o diretório de armazenamento e a evidência especificados.Defines a dynamic assembly using the specified name, access mode, storage directory, and evidence.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir, System::Security::Policy::Evidence ^ evidence);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of DefineDynamicAssembly which does not take an Evidence parameter. See https://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string * System.Security.Policy.Evidence -> System.Reflection.Emit.AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

dir
String

O nome do diretório onde o assembly será salvo.The name of the directory where the assembly will be saved. Caso dir seja null, o diretório usa como padrão o diretório atual.If dir is null, the directory defaults to the current directory.

evidence
Evidence

A evidência fornecida para o assembly dinâmico.The evidence supplied for the dynamic assembly. A evidência é usada inalterada como o conjunto final de evidências usado na resolução da política.The evidence is used unaltered as the final set of evidence used for policy resolution.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Implementações

Atributos

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Para este exemplo de código ser executado, você deve fornecer o nome de assembly totalmente qualificado.For this code example to run, you must provide the fully qualified assembly name. Para obter informações sobre como obter o nome totalmente qualificado do assembly, consulte nomes de assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

Apenas chamadores totalmente confiáveis podem fornecer evidence ao definir um Assembly dinâmico.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. O runtime mapeará Evidence pela política de segurança para determinar as permissões concedidas.The runtime will map the Evidence through the security policy to determine the granted permissions. Os chamadores parcialmente confiáveis devem fornecer um evidencenulo.Partially trusted callers must supply a null evidence. Caso evidence seja null, o runtime copia os conjuntos de permissões, ou seja, os conjuntos de concessões e negações, do Assembly do chamador para o Assembly dinâmico definido e marca a política como resolvida.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Se o Assembly dinâmico for salvo em disco, os carregamentos subsequentes obterão concessões com base em políticas associadas ao local no qual o Assembly foi salvo.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Este método só deve ser usado para definir um assembly dinâmico no domínio de aplicativo atual.This method should only be used to define a dynamic assembly in the current application domain. Para obter mais informações, consulte a sobrecarga de método Load(AssemblyName).For more information, see the Load(AssemblyName) method overload.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável usar uma sobrecarga do método DefineDynamicAssembly que especifica evidência e permissões, fornecer a evidência que você deseja que o assembly dinâmico tenha e incluir SecurityPermissionFlag.SkipVerification em refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Segurança

SecurityPermission
para carregar um assembly com evidências.to load an assembly with evidence. Enumeração associada: ControlEvidence.Associated enumeration: ControlEvidence.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>, SecurityContextSource)

Define um assembly dinâmico com o nome, o modo de acesso e os atributos personalizados especificados e usando a origem especificada para o seu contexto de segurança.Defines a dynamic assembly with the specified name, access mode, and custom attributes, and using the specified source for its security context.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::Collections::Generic::IEnumerable<System::Reflection::Emit::CustomAttributeBuilder ^> ^ assemblyAttributes, System::Security::SecurityContextSource securityContextSource);
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes, System.Security.SecurityContextSource securityContextSource);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * seq<System.Reflection.Emit.CustomAttributeBuilder> * System.Security.SecurityContextSource -> System.Reflection.Emit.AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo de acesso para o assembly dinâmico.The access mode for the dynamic assembly.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Uma lista de atributos enumeráveis a serem aplicados ao assembly ou null caso não haja nenhum atributo.An enumerable list of attributes to be applied to the assembly, or null if there are no attributes.

securityContextSource
SecurityContextSource

A origem do contexto de segurança.The source of the security context.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name starts with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

O valor de securityContextSource não era um dos valores de enumeração.The value of securityContextSource was not one of the enumeration values.

Comentários

Use esta sobrecarga de método para especificar atributos que não funcionam corretamente, senão aplicados quando um assembly dinâmico é criado.Use this method overload to specify attributes that do not work correctly unless they are applied when a dynamic assembly is created. Por exemplo, os atributos de segurança como SecurityTransparentAttribute e SecurityCriticalAttribute não funcionam corretamente caso sejam adicionados após um assembly dinâmico ser criado.For example, security attributes such as SecurityTransparentAttribute and SecurityCriticalAttribute do not work correctly if they are added after a dynamic assembly has been created.

Esse método deve ser usado somente para definir um assembly dinâmico no domínio do aplicativo atual.This method should be used only to define a dynamic assembly in the current application domain. Para obter mais informações sobre essa restrição, consulte a sobrecarga do método de Load(AssemblyName).For more information about this restriction, see the Load(AssemblyName) method overload.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, String)

Define um assembly dinâmico usando o nome, o modo de acesso e o diretório de armazenamento especificados.Defines a dynamic assembly using the specified name, access mode, and storage directory.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::String ^ dir);
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * string -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, dir As String) As AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

dir
String

O nome do diretório onde o assembly será salvo.The name of the directory where the assembly will be saved. Caso dir seja null, o diretório usa como padrão o diretório atual.If dir is null, the directory defaults to the current directory.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Implementações

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Para este exemplo de código ser executado, você deve fornecer o nome de assembly totalmente qualificado.For this code example to run, you must provide the fully qualified assembly name. Para obter informações sobre como obter o nome totalmente qualificado do assembly, consulte nomes de assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

Este método só deve ser usado para definir um assembly dinâmico no domínio de aplicativo atual.This method should only be used to define a dynamic assembly in the current application domain. Para obter mais informações, consulte a sobrecarga de método Load(AssemblyName).For more information, see the Load(AssemblyName) method overload.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável usar uma sobrecarga do método DefineDynamicAssembly que especifica evidência e permissões, fornecer a evidência que você deseja que o assembly dinâmico tenha e incluir SecurityPermissionFlag.SkipVerification em refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, Evidence)

Aviso

Esta API agora é obsoleta.

Define um assembly dinâmico usando o nome, o modo de acesso e a evidência especificados.Defines a dynamic assembly using the specified name, access mode, and evidence.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::Security::Policy::Evidence ^ evidence);
[System.Obsolete("Declarative security for assembly level is no longer enforced")]
[System.Obsolete("Assembly level declarative security is obsolete and is no longer enforced by the CLR by default.  See https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Security.Policy.Evidence evidence);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * System.Security.Policy.Evidence -> System.Reflection.Emit.AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo no qual o assembly dinâmico será acessado.The mode in which the dynamic assembly will be accessed.

evidence
Evidence

A evidência fornecida para o assembly dinâmico.The evidence supplied for the dynamic assembly. A evidência é usada inalterada como o conjunto final de evidências usado na resolução da política.The evidence is used unaltered as the final set of evidence used for policy resolution.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Implementações

Atributos

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and the AssemblyResolve event.

Primeiro, o exemplo de código tenta criar uma instância de MyDynamicType chamando o método CreateInstance com um nome de assembly inválido e captura a exceção resultante.First, the code example tries to create an instance of MyDynamicType by calling the CreateInstance method with an invalid assembly name, and catches the resulting exception.

O exemplo de código, em seguida, adiciona um manipulador de eventos para o evento AssemblyResolve e tenta criar uma instância deMyDynamicTypenovamente.The code example then adds an event handler for the AssemblyResolve event, and again tries to create an instance ofMyDynamicType. Durante a chamada para CreateInstance, o evento AssemblyResolve é gerado para o assembly inválido.During the call to CreateInstance, the AssemblyResolve event is raised for the invalid assembly. O manipulador de eventos cria um assembly dinâmico que contém um tipo chamado MyDynamicType, fornece ao tipo um construtor sem parâmetros e retorna o novo assembly dinâmico.The event handler creates a dynamic assembly that contains a type named MyDynamicType, gives the type a parameterless constructor, and returns the new dynamic assembly. A chamada para CreateInstance, em seguida, é concluída com êxito e o construtor de MyDynamicType exibe uma mensagem no console.The call to CreateInstance then finishes successfully, and the constructor for MyDynamicType displays a message at the console.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

Apenas chamadores totalmente confiáveis podem fornecer evidence ao definir um Assembly dinâmico.Only fully trusted callers can supply their evidence when defining a dynamic Assembly. O runtime mapeará Evidence pela política de segurança para determinar as permissões concedidas.The runtime will map the Evidence through the security policy to determine the granted permissions. Os chamadores parcialmente confiáveis devem fornecer um evidencenulo.Partially trusted callers must supply a null evidence. Caso evidence seja null, o runtime copia os conjuntos de permissões, ou seja, os conjuntos de concessões e negações, do Assembly do chamador para o Assembly dinâmico definido e marca a política como resolvida.If evidence is null, the runtime copies the permission sets, that is, the current grant and deny sets, from the caller's Assembly to the dynamic Assembly being defined and marks policy as resolved.

Se o Assembly dinâmico for salvo em disco, os carregamentos subsequentes obterão concessões com base em políticas associadas ao local no qual o Assembly foi salvo.If the dynamic Assembly is saved to disk, subsequent loads will get grants based on policies associated with the location where the Assembly was saved.

Este método só deve ser usado para definir um assembly dinâmico no domínio de aplicativo atual.This method should only be used to define a dynamic assembly in the current application domain. Para obter mais informações, consulte a sobrecarga de método Load(AssemblyName).For more information, see the Load(AssemblyName) method overload.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável usar uma sobrecarga do método DefineDynamicAssembly que especifica evidência e permissões, fornecer a evidência que você deseja que o assembly dinâmico tenha e incluir SecurityPermissionFlag.SkipVerification em refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Segurança

SecurityPermission
para carregar um assembly com evidências.to load an assembly with evidence. Enumeração associada: ControlEvidence.Associated enumeration: ControlEvidence.

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess, IEnumerable<CustomAttributeBuilder>)

Define um assembly dinâmico com o nome, o modo de acesso e os atributos personalizados especificados.Defines a dynamic assembly with the specified name, access mode, and custom attributes.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access, System::Collections::Generic::IEnumerable<System::Reflection::Emit::CustomAttributeBuilder ^> ^ assemblyAttributes);
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess * seq<System.Reflection.Emit.CustomAttributeBuilder> -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess, assemblyAttributes As IEnumerable(Of CustomAttributeBuilder)) As AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo de acesso para o assembly dinâmico.The access mode for the dynamic assembly.

assemblyAttributes
IEnumerable<CustomAttributeBuilder>

Uma lista de atributos enumeráveis a serem aplicados ao assembly ou null caso não haja nenhum atributo.An enumerable list of attributes to be applied to the assembly, or null if there are no attributes.

Retornos

Um assembly dinâmico com o nome e os recursos especificados.A dynamic assembly with the specified name and features.

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name starts with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo de código a seguir mostra como criar um assembly dinâmico que tem o SecurityTransparentAttribute.The following code sample shows how to create a dynamic assembly that has the SecurityTransparentAttribute. O atributo deve ser especificado como um elemento de uma matriz de objetos CustomAttributeBuilder.The attribute must be specified as an element of an array of CustomAttributeBuilder objects.

A primeira etapa na criação do CustomAttributeBuilder é obter um construtor para o atributo.The first step in creating the CustomAttributeBuilder is to obtain a constructor for the attribute. O construtor não tem parâmetros, portanto, o método GetConstructor é chamado com uma matriz vazia de objetos Type para representar os tipos dos parâmetros.The constructor has no parameters, so the GetConstructor method is called with an empty array of Type objects to represent the types of the parameters. A segunda etapa é passar o objeto ConstructorInfo resultante para o construtor da classe CustomAttributeBuilder, junto com uma matriz vazia do tipo Object para representar os argumentos.The second step is to pass the resulting ConstructorInfo object to the constructor for the CustomAttributeBuilder class, together with an empty array of type Object to represent the arguments.

O CustomAttributeBuilder resultante é passado para o método DefineDynamicAssembly como o único elemento de uma matriz.The resulting CustomAttributeBuilder is then passed to the DefineDynamicAssembly method as the only element of an array.

O código de exemplo define um módulo e um tipo no novo assembly dinâmico e, em seguida, exibe os atributos do assembly.The example code defines a module and a type in the new dynamic assembly, and then displays the assembly's attributes.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Security;

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 = 
        SecurityTransparentAttribute::typeid->GetConstructor(
            Type::EmptyTypes);
    CustomAttributeBuilder^ transparent = gcnew CustomAttributeBuilder(
        transparentCtor,
        gcnew array<Object^> {} );
      
    // Create a dynamic assembly using the attribute. The attribute is
    // passed as an array with one element.
    AssemblyName^ aName = gcnew AssemblyName("EmittedAssembly");
    AssemblyBuilder^ ab = AppDomain::CurrentDomain->DefineDynamicAssembly( 
        aName, 
        AssemblyBuilderAccess::Run,
        gcnew array<CustomAttributeBuilder^> { transparent } );

    ModuleBuilder^ mb = ab->DefineDynamicModule( aName->Name );
    TypeBuilder^ tb = mb->DefineType( 
        "MyDynamicType", 
        TypeAttributes::Public );
    tb->CreateType();

    Console::WriteLine("{0}\nAssembly attributes:", ab);
    for each (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
 */
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
 */
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Security

Module Example

    Sub 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.
        '
        Dim transparentCtor As ConstructorInfo = _
            GetType(SecurityTransparentAttribute).GetConstructor( _
                Type.EmptyTypes)
        Dim transparent As New CustomAttributeBuilder( _
            transparentCtor, _
            New Object() {} )
      
        ' Create a dynamic assembly Imports the attribute. The attribute is
        ' passed as an array with one element.
        Dim aName As New AssemblyName("EmittedAssembly")
        Dim ab As AssemblyBuilder = _
            AppDomain.CurrentDomain.DefineDynamicAssembly( _
                aName, _
                AssemblyBuilderAccess.Run, _
                New CustomAttributeBuilder() { transparent } )

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

        Console.WriteLine("{0}" & vbLf & "Assembly attributes:", ab)
        For Each attr As Attribute In ab.GetCustomAttributes(True)
            Console.WriteLine(vbTab & "{0}", attr)
        Next
    End Sub
End Module

' This code example produces the following output:
'
'EmittedAssembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
'Assembly attributes:
'        System.Security.SecurityTransparentAttribute

Comentários

Use esta sobrecarga de método para especificar atributos que não funcionam corretamente, senão aplicados quando um assembly dinâmico é criado.Use this method overload to specify attributes that do not work correctly unless they are applied when a dynamic assembly is created. Por exemplo, os atributos de segurança como SecurityTransparentAttribute e SecurityCriticalAttribute não funcionam corretamente caso sejam adicionados após um assembly dinâmico ser criado.For example, security attributes such as SecurityTransparentAttribute and SecurityCriticalAttribute do not work correctly if they are added after a dynamic assembly has been created.

Esse método deve ser usado somente para definir um assembly dinâmico no domínio do aplicativo atual.This method should be used only to define a dynamic assembly in the current application domain. Para obter mais informações sobre essa restrição, consulte a sobrecarga do método de Load(AssemblyName).For more information about this restriction, see the Load(AssemblyName) method overload.

Essa sobrecarga de método é introduzida no .NET Framework 3,5.NET Framework 3.5.This method overload is introduced in the .NET Framework 3,5.NET Framework 3.5.

Veja também

DefineDynamicAssembly(AssemblyName, AssemblyBuilderAccess)

Define um assembly dinâmico com o nome e o modo de acesso especificados.Defines a dynamic assembly with the specified name and access mode.

public:
 System::Reflection::Emit::AssemblyBuilder ^ DefineDynamicAssembly(System::Reflection::AssemblyName ^ name, System::Reflection::Emit::AssemblyBuilderAccess access);
public System.Reflection.Emit.AssemblyBuilder DefineDynamicAssembly (System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access);
member this.DefineDynamicAssembly : System.Reflection.AssemblyName * System.Reflection.Emit.AssemblyBuilderAccess -> System.Reflection.Emit.AssemblyBuilder
Public Function DefineDynamicAssembly (name As AssemblyName, access As AssemblyBuilderAccess) As AssemblyBuilder

Parâmetros

name
AssemblyName

A identidade exclusiva do assembly dinâmico.The unique identity of the dynamic assembly.

access
AssemblyBuilderAccess

O modo de acesso para o assembly dinâmico.The access mode for the dynamic assembly.

Retornos

Um assembly dinâmico com o nome e o modo de acesso especificados.A dynamic assembly with the specified name and access mode.

Implementações

Exceções

name é null.name is null.

A propriedade Name de name é null.The Name property of name is null.

- ou --or- A propriedade Name de name começa com espaço em branco ou contém uma barra ou uma barra invertida.The Name property of name begins with white space, or contains a forward or backward slash.

A operação é tentada em um domínio de aplicativo descarregado.The operation is attempted on an unloaded application domain.

Exemplos

O exemplo a seguir demonstra o método DefineDynamicAssembly e o evento AssemblyResolve.The following sample demonstrates the DefineDynamicAssembly method and AssemblyResolve event.

Para este exemplo de código ser executado, você deve fornecer o nome de assembly totalmente qualificado.For this code example to run, you must provide the fully qualified assembly name. Para obter informações sobre como obter o nome totalmente qualificado do assembly, consulte nomes de assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
ref class Test
{
public:
   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( dynamic_cast<AppDomain^>(sender) );
   }

   static Assembly^ DefineDynamicAssembly( AppDomain^ domain )
   {
      
      // Build a dynamic assembly using Reflection Emit API.
      AssemblyName^ assemblyName = gcnew 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, nullptr );
      ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
      ilGenerator->EmitWriteLine( "MyDynamicType instantiated!" );
      ilGenerator->Emit( OpCodes::Ret );
      typeBuilder->CreateType();
      return assemblyBuilder;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   Test::InstantiateMyDynamicType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Test::MyResolveEventHandler );
   Test::InstantiateMyDynamicType( currentDomain ); // OK!
}

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;
   }
}

Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyDynamicType(currentDomain)   'Failed!
      
      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
      
      InstantiateMyDynamicType(currentDomain)   'OK!
   End Sub
   
   Sub InstantiateMyDynamicType(domain As AppDomain)
      Try
         ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyDynamicType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   Function MyResolveEventHandler(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Return DefineDynamicAssembly(DirectCast(sender, AppDomain))
   End Function 'MyResolveEventHandler
   
   Function DefineDynamicAssembly(domain As AppDomain) As System.Reflection.Assembly
      ' Build a dynamic assembly using Reflection Emit API.

      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyDynamicAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyDynamicModule")
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyDynamicType", TypeAttributes.Public)
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      
      ilGenerator.EmitWriteLine("MyDynamicType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      Return assemblyBuilder
   End Function 'DefineDynamicAssembly

End Module 'Test 

Comentários

Este método só deve ser usado para definir um assembly dinâmico no domínio de aplicativo atual.This method should only be used to define a dynamic assembly in the current application domain. Para obter mais informações, consulte a sobrecarga de método Load(AssemblyName).For more information, see the Load(AssemblyName) method overload.

Observação

Durante o desenvolvimento de código que emite assemblies dinâmicos, é recomendável usar uma sobrecarga do método DefineDynamicAssembly que especifica evidência e permissões, fornecer a evidência que você deseja que o assembly dinâmico tenha e incluir SecurityPermissionFlag.SkipVerification em refusedPermissions.During the development of code that emits dynamic assemblies, it is recommended that you use an overload of the DefineDynamicAssembly method that specifies evidence and permissions, supply the evidence you want the dynamic assembly to have, and include SecurityPermissionFlag.SkipVerification in refusedPermissions. A inclusão de SkipVerification no parâmetro de refusedPermissions garante que o MSIL seja verificado.Including SkipVerification in the refusedPermissions parameter ensures that the MSIL is verified. Uma limitação dessa técnica é que ela também faz SecurityException ser lançado quando usado com código que demanda confiança total.A limitation of this technique is that it also causes SecurityException to be thrown when used with code that demands full trust.

Aplica-se a