Share via


다른 응용 프로그램 도메인의 코드 실행(C# 및 Visual Basic)

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

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

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

다음 코드는 네임스페이스 하나와 클래스 두 개로 구성된 어셈블리를 만듭니다. 코드를 HelloWorldRemote라는 이름의 Visual Studio 콘솔 응용 프로그램에 붙여넣거나 솔루션을 빌드 또는 실행한 후 닫습니다. 프로젝트의 obj/디버그 폴더에 있는 HelloWorldRemote.exe 파일을 찾아 C: 드라이브로 복사합니다.

' This module contains code to be called.
Module HelloWorldRemote
    Class RemoteObject
        Inherits System.MarshalByRefObject
        Sub RemoteObject()
            System.Console.WriteLine("Hello, World! (RemoteObject Constructor)")
        End Sub
    End Class
    Sub Main()
        System.Console.WriteLine("Hello, World! (Main method)")
    End Sub
End Module
// 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 클래스의 인스턴스를 인스턴스화할 수 있습니다. 인스턴스화로 인해 개체 생성자가 실행됩니다.

' Load the assembly into the current appdomain:
Dim newAssembly As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom("c:\HelloWorldRemote.exe")

' Instantiate RemoteObject:
newAssembly.CreateInstance("HelloWorldRemote.RemoteObject")
// 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 클래스의 인스턴스를 만듭니다. 인스턴스를 만들면 생성자가 실행됩니다.

참고

Assembly.LoadFrom을 사용할 경우의 단점에 대한 자세한 내용은 Assembly.LoadFrom(String)의 설명 단원을 참조하십시오.

Dim NewAppDomain As System.AppDomain = 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")
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 어셈블리를 지정합니다. C#에서는 using HelloWorldRemote; 지시문을 추가하고, Visual Basic에서는 Imports HelloWorldRemote 문을 추가합니다. 그런 다음 프로그램에서 RemoteObject 형식을 사용하여 다음과 같이 RemoteObject 개체 인스턴스를 선언합니다.

' This code creates an instance of RemoteObject, 
' assuming HelloWorldRemote has been added as a reference:
Dim o As HelloWorldRemote.RemoteObject = New HelloWorldRemote.RemoteObject()
// This code creates an instance of RemoteObject, 
// assuming HelloWorldRemote has been added as a reference:
HelloWorldRemote.RemoteObject o = new HelloWorldRemote.RemoteObject();

참고 항목

참조

응용 프로그램 도메인(C# 및 Visual Basic)

개념

C# 프로그래밍 가이드

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

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

기타 리소스

Visual Basic 프로그래밍 가이드

응용 프로그램 도메인

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