다음을 통해 공유


다른 응용 프로그램 도메인의 코드 실행(C# 프로그래밍 가이드)

업데이트: 2007년 11월

응용 프로그램 도메인에 어셈블리가 로드되고 나면 여기에 포함된 코드를 실행할 수 있습니다. 이를 수행하는 가장 간단한 방법은 AssemblyLoad를 사용하여 어셈블리를 현재 응용 프로그램 도메인에 로드하고 어셈블리의 기본 진입점에서 코드 실행을 시작하는 것입니다.

어셈블리를 다른 응용 프로그램 도메인에 로드하려면 ExecuteAssembly 또는 ExecuteAssemblyByName을 사용하거나 이러한 메서드의 오버로드된 다른 버전 중 하나를 사용해야 합니다.

기본 진입점이 아닌 다른 위치에서 시작하는 어셈블리를 실행하려면 MarshalByRefObject에서 파생된 원격 어셈블리의 새 형식을 정의합니다. 그런 다음 CreateInstance를 사용하여 응용 프로그램에 해당 형식의 인스턴스를 만듭니다.

네임스페이스 하나와 클래스 두 개로 구성된 어셈블리를 만드는 다음과 같은 파일을 생각해 볼 수 있습니다. 이 어셈블리를 빌드한 다음 HelloWorldRemote.exe라는 이름으로 드라이브 C에 저장한 것으로 가정합니다.

// 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)");
        }
    }
}

다른 응용 프로그램에서 이 코드에 액세스하려면 어셈블리를 현재 응용 프로그램 도메인에 로드하거나 새 응용 프로그램 도메인을 만들고 여기에 어셈블리를 로드해야 합니다. Assembly.LoadFrom을 사용하여 현재 응용 프로그램 도메인에 어셈블리를 로드하면 Assembly.CreateInstance를 사용하여 RemoteObject 클래스의 인스턴스를 인스턴스화하고 개체 생성자를 실행할 수 있습니다.

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

별도의 응용 프로그램 도메인에 어셈블리를 로드하는 경우 AppDomain.ExecuteAssembly를 사용하여 기본 진입점에 액세스하거나 AppDomain.CreateInstance를 사용하여 RemoteObject 클래스의 인스턴스를 만듭니다. 인스턴스를 만들면 생성자가 실행됩니다.

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

어셈블리를 프로그래밍 방식으로 로드하지 않으려면 솔루션 탐색기에서 참조 추가를 사용하여 HelloWorldRemote.exe 어셈블리를 지정합니다. 그런 다음 using HelloWorldRemote; 지시문을 응용 프로그램의 using 블록에 추가하고 프로그램에서 RemoteObject 형식을 사용하여 다음과 같이 RemoteObject 개체의 인스턴스를 선언합니다.

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

참고 항목

개념

C# 프로그래밍 가이드

응용 프로그램 도메인 개요

응용 프로그램 도메인과 어셈블리

응용 프로그램 도메인으로 프로그래밍

참조

응용 프로그램 도메인(C# 프로그래밍 가이드)

기타 리소스

응용 프로그램 도메인

응용 프로그램 도메인 및 어셈블리를 사용한 프로그래밍