Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

Propriedade AppDomain.DynamicDirectory

Obtém o diretório que o resolvedor de assembly usa para investigar para assemblies criados dinamicamente.

Namespace:  System
Assembly:  mscorlib (em mscorlib.dll)
public string DynamicDirectory { get; }

Valor de propriedade

Tipo: System.String
O diretório que o resolvedor de assembly usa para investigar para assemblies criados dinamicamente.

Implementações

_AppDomain.DynamicDirectory
ExceçãoCondição
AppDomainUnloadedException

A operação é tentada em um domínio de aplicativo descarregado.

Para definir o diretório dinâmico, atribuir um caminho de diretório base para o AppDomainSetup.DynamicBase propriedade do AppDomainSetup objeto que será usado para criar o novo domínio de aplicativo. O caminho do diretório base você atribuir à propriedade é modificado pela adição de uma subpasta cujo nome simple é o código hash da seqüência de caracteres atribuir para a AppDomainSetup.ApplicationName propriedade, portanto, é o formato do diretório base caminho original\o código hash. O diretório dinâmico é um subdiretório deste diretório base. Seu nome simple é o valor de AppDomainSetup.ApplicationName propriedade, portanto, seu formato é caminho original\código hash\nome do aplicativo.

O exemplo a seguir cria um domínio de aplicativo com um diretório para assemblies dinâmicos, emite um assembly dinâmico e armazena-o no diretório dinâmico, carrega o assembly no novo domínio de aplicativo e usa-lo.

O exemplo cria um AppDomainSetup objeto e define sua ApplicationName propriedade como "Exemplo" e sua DynamicBase propriedade para "C:\DynamicAssemblyDir". O exemplo exibe o DynamicBase propriedade para mostrar que o código de hash do nome do aplicativo foi acrescentado como um subdiretório do caminho originalmente atribuído.

ObservaçãoObservação

O diretório base neste exemplo se destina a ser fora do caminho de sondagem para o aplicativo de exemplo. Certifique-se de compilar o exemplo em um local diferente. Exclua o diretório base e todos os seus subdiretórios cada vez que você executar o exemplo.

O exemplo cria um novo domínio de aplicativo, usando o AppDomainSetup objeto. O exemplo usa o DynamicDirectory propriedade para recuperar o nome do diretório, para que ele possa criar o diretório. (O exemplo poderia facilmente criar o diretório antecipadamente concatenando o caminho original, o código de hash do nome do aplicativo e o nome do aplicativo.)

O exemplo possui um GenerateDynamicAssembly método emite um assembly denominado DynamicHelloWorld.dll e armazena-o no diretório dinâmico do novo domínio de aplicativo. O assembly dinâmico contém um tipo, HelloWorld, que tem um método estático (Shared método Visual Basic) denominada HelloFromAD. Chamar esse método exibe o nome do domínio do aplicativo.

O Example classe deriva de MarshalByRefObject, portanto, o exemplo pode criar uma instância da classe no novo domínio de aplicativo e chamada de Test método. O Test método carrega o assembly dinâmico por seu nome de exibição e chama estática HelloFromAD método.

Você pode mostrar que o diretório dinâmico é pesquisado após os caminhos de probing normais escrevendo código para um assembly denominado DynamicHelloWorld.dll e compilando-o no mesmo diretório como este exemplo. O assembly deve ter uma classe chamada HelloWorld com um método estático denominado HelloFromAD. Este método não tem têm a mesma funcionalidade como um exemplo; ele simplesmente pode exibir uma seqüência de caracteres ao console. O assembly deve ter também uma AssemblyVersionAttribute atributo define a versão 1.0.0.0. Quando você executar o exemplo, o assembly compilado no diretório atual é encontrado antes de diretório dinâmico é pesquisado.


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

public class Example : MarshalByRefObject
{
   static void Main()
   {
      // Prepare to create a new application domain.
      AppDomainSetup setup = new AppDomainSetup();

      // Set the application name before setting the dynamic base.
      setup.ApplicationName = "Example";

      // Set the location of the base directory where assembly resolution 
      // probes for dynamic assemblies. Note that the hash code of the 
      // application name is concatenated to the base directory name you 
      // supply. 
      setup.DynamicBase = "C:\\DynamicAssemblyDir";
      Console.WriteLine("DynamicBase is set to '{0}'.", setup.DynamicBase);

      AppDomain ad = AppDomain.CreateDomain("MyDomain", null, setup);

      // The dynamic directory name is the dynamic base concatenated with
      // the application name: <DynamicBase>\<hash code>\<ApplicationName>
      string dynamicDir = ad.DynamicDirectory;
      Console.WriteLine("Dynamic directory is '{0}'.", dynamicDir);

      // The AssemblyBuilder won't create this directory automatically.
      if (!System.IO.Directory.Exists(dynamicDir))
      {
         Console.WriteLine("Creating the dynamic directory.");
         System.IO.Directory.CreateDirectory(dynamicDir);
      }

      // Generate a dynamic assembly and store it in the dynamic 
      // directory.
      GenerateDynamicAssembly(dynamicDir);

      // Create an instance of the Example class in the application domain,
      // and call its Test method to load the dynamic assembly and use it.
      Example ex = (Example) ad.CreateInstanceAndUnwrap( 
         Assembly.GetExecutingAssembly().FullName, "Example");
      ex.Test();
   }

   public void Test()
   {
      Assembly dynAssem = Assembly.Load(
         "DynamicHelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");

      Type myType = dynAssem.GetType("HelloWorld");
      myType.InvokeMember("HelloFromAD", BindingFlags.Public | 
         BindingFlags.Static | BindingFlags.InvokeMethod, 
         Type.DefaultBinder, null, null);
   }


   private static void GenerateDynamicAssembly(string location)
   {
      // Define the dynamic assembly and the module. There is only one
      // module in this assembly. Note that the call to DefineDynamicAssembly 
      // specifies the location where the assembly will be saved. The 
      // assembly version is 1.0.0.0.
      //
      AssemblyName asmName = new AssemblyName("DynamicHelloWorld");
      asmName.Version = new Version("1.0.0.0");

      AssemblyBuilder ab = 
         AppDomain.CurrentDomain.DefineDynamicAssembly( 
            asmName, AssemblyBuilderAccess.Save, location);

      String moduleName = asmName.Name + ".exe";
      ModuleBuilder mb = ab.DefineDynamicModule(asmName.Name, moduleName);

      // Define the "HelloWorld" type, with one static method.
      TypeBuilder tb = mb.DefineType("HelloWorld", TypeAttributes.Public);
      MethodBuilder hello = tb.DefineMethod("HelloFromAD", 
         MethodAttributes.Public | MethodAttributes.Static, null, null);

      // The method displays a message that contains the name of the application
      // domain where the method is executed.
      ILGenerator il = hello.GetILGenerator();
      il.Emit(OpCodes.Ldstr, "Hello from '{0}'!");
      il.Emit(OpCodes.Call, typeof(AppDomain).GetProperty("CurrentDomain").GetGetMethod());
      il.Emit(OpCodes.Call, typeof(AppDomain).GetProperty("FriendlyName").GetGetMethod());
      il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", 
                             new Type[] { typeof(String), typeof(String) }));
      il.Emit(OpCodes.Ret);

      // Complete the HelloWorld type and save the assembly. The assembly
      // is placed in the location specified by DefineDynamicAssembly.
      Type myType = tb.CreateType();
      ab.Save(moduleName);
   }
}

/* This example produces output similar to the following:

DynamicBase is set to 'C:\DynamicAssemblyDir\5e4a7545'.
Dynamic directory is 'C:\DynamicAssemblyDir\5e4a7545\Example'.
Creating the dynamic directory.
Hello from 'MyDomain'!
 */


.NET Framework

Com suporte em: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte .Requisitos de sistema do NET Framework.
Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
© 2013 Microsoft. Todos os direitos reservados.