Compartilhar via


Executar código em outro domínio de aplicação (Guia de programação C#)

Depois de um assembly foi carregado em um domínio do aplicativo, o código contém pode ser executado.A maneira mais simples para fazer isso é usar AssemblyLoad qual carregar o assembly no domínio do aplicativo corrente e começar a executar o código no ponto de entrada padrão do assembly.

Se você deseja carregar o assembly em Outros domínio do aplicativo, use ExecuteAssembly ou ExecuteAssemblyByName, ou uma da Outros sobrecarregado versões desses métodos.

Se você quiser executar Outros assembly começando diferente de ponto de entrada padrão, definir um novo tipo no assembly remoto, derivando de MarshalByRefObject. Em seguida, use CreateInstance Para criar uma instância desse tipo em seu aplicativo.

Considere o seguinte arquivo, que cria um assembly consistem em um único namespace e duas classes.Suponha que esse assembly tiver sido construído e é armazenado na unidade C com o nome de HelloWorldRemote.exe.

// This namespace contains code to be called.
namespace HelloWorldRemote
{
    public class RemoteObject : System.MarshalByRefObject
    {
        public RemoteObject()
        {
            System.Console.WriteLine("Hello, World! (RemoteObject Constructor)");
        }
    }
    class Program
    {
        static void Main()
        {
            System.Console.WriteLine("Hello, World! (Main method)");
        }
    }
}

Para acesso o código de outro aplicativo, você pode carregar o assembly no domínio do aplicativo corrente ou criar um novo domínio do aplicativo e carregar o assembly para ele.Se você carregar o assembly no domínio do aplicativo corrente com Assembly.LoadFrom, você pode usar Assembly.CreateInstance para instanciar uma instância das RemoteObject classe, que faz com que o construtor de objeto a ser executado.

static void Main()
{
    // Load the assembly into the current appdomain:
    System.Reflection.Assembly newAssembly = System.Reflection.Assembly.LoadFrom(@"c:\HelloWorldRemote.exe");

    // Instantiate RemoteObject:
    newAssembly.CreateInstance("HelloWorldRemote.RemoteObject");
}

Ao carregar o assembly em um domínio do aplicativo separado, use AppDomain.ExecuteAssembly para acessar o ponto de entrada padrão ou AppDomain.CreateInstance Para criar uma instância da RemoteObject classe. Criar a instância faz com que o construtor para ser executado.

static void Main()
{
    System.AppDomain NewAppDomain = System.AppDomain.CreateDomain("NewApplicationDomain");

    // Load the assembly and call the default entry point:
    NewAppDomain.ExecuteAssembly(@"c:\HelloWorldRemote.exe");

    // Create an instance of RemoteObject:
    NewAppDomain.CreateInstanceFrom(@"c:\HelloWorldRemote.exe", "HelloWorldRemote.RemoteObject");
}

Se não desejar carregar o assembly programaticamente, use Adicionar referência from the O gerenciador de soluções para especificar o assembly HelloWorldRemote.exe.Em seguida, adicione um using HelloWorldRemote; diretiva para o usando o bloquear do seu aplicativo e usar o RemoteObject Digite seu programa para declarar uma instância das RemoteObject objeto, como este:

static void Main()
{
    // This code creates an instance of RemoteObject, assuming HelloWorldRemote has been added as a reference:
    HelloWorldRemote.RemoteObject o = new HelloWorldRemote.RemoteObject();
}

Consulte também

Conceitos

Guia de Programação C#

Visão Geral Sobre Domínios de Aplicativos

Domínios de Aplicativos e Assemblies

Programação com domínios de aplicativo

Referência

Domínios de aplicativo (guia de programação C#)

Outros recursos

Domínios de aplicativo

Programação com Domínios de Aplicativos e Assemblies