■ AppDomain 클래스 : 별도 애플리케이션 도메인에서 특정 어셈블리 로드하기
------------------------------------------------------------------------------------------------------------------------
[TestLibrary 프로젝트]
▶ TestClass.cs
using System;
namespace TestLibrary { /// <summary> /// 테스트 클래스 /// </summary> public class TestClass { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private
#region 메시지 쓰기 - WriteMessage(message)
/// <summary> /// 메시지 쓰기 /// </summary> /// <param name="message">메시지</param> public static void WriteMessage(string message) { Console.WriteLine("TestClass.WriteMessage : " + message); }
#endregion } }
|
[TestProject 프로젝트]
▶ AssemblyLoader.cs
using System; using System.Reflection;
namespace TestProject { /// <summary> /// 어셈블리 로더 /// </summary> public class AssemblyLoader : MarshalByRefObject { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary> /// 어셈블리 /// </summary> private Assembly assembly;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private
#region 수명 주기 서비스 초기화하기 - InitializeLifetimeService()
/// <summary> /// 수명 주기 서비스 초기화하기 /// </summary> /// <returns>수명 주기 서비스 객체</returns> public override object InitializeLifetimeService() { return null; }
#endregion #region 어셈블리 로드하기 - LoadAssembly(filePath)
/// <summary> /// 어셈블리 로드하기 /// </summary> /// <param name="filePath">파일 경로</param> public void LoadAssembly(string filePath) { this.assembly = Assembly.Load(AssemblyName.GetAssemblyName(filePath)); }
#endregion #region 정적 메소드 실행하기 - ExecuteStaticMethod(typeName, methodName, parameterArray)
/// <summary> /// 정적 메소드 실행하기 /// </summary> /// <param name="typeName">타입명</param> /// <param name="methodName">메소드명</param> /// <param name="parameterArray">매개 변수 배열</param> /// <returns>실행 결과</returns> public object ExecuteStaticMethod(string typeName, string methodName, params object[] parameterArray) { Type type = assembly.GetType(typeName);
MethodInfo method = type.GetMethod(methodName, BindingFlags.Static | BindingFlags.Public);
return method.Invoke(null, parameterArray); }
#endregion } }
|
▶ Program.cs
using System;
namespace TestProject { /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { AppDomain appDomain = AppDomain.CreateDomain("Test");
AssemblyLoader loader = (AssemblyLoader)appDomain.CreateInstanceAndUnwrap (typeof(AssemblyLoader).Assembly.FullName, typeof(AssemblyLoader).FullName);
loader.LoadAssembly("TestLibrary.dll");
loader.ExecuteStaticMethod("TestLibrary.TestClass", "WriteMessage", DateTime.Now.ToShortDateString());
Console.WriteLine("프로그램을 종료하기 위해 아무 키나 눌러 주시기 바랍니다.");
Console.ReadKey(true);
AppDomain.Unload(appDomain); }
#endregion } }
|
------------------------------------------------------------------------------------------------------------------------
'C# > Common' 카테고리의 다른 글
[C#/COMMON] 한글 오토마타 사용하기 (0) | 2019.06.28 |
---|---|
[C#/COMMON] Math 클래스 : Round 정적 메소드를 사용해 반올림하기 (0) | 2019.06.25 |
[C#/COMMON] 현재 실행하고 있는 메소드명 구하기 (0) | 2019.06.25 |
[C#/COMMON] 윈도우즈 서비스를 특정 계정으로 시작하기 (0) | 2019.06.20 |
[C#/COMMON] 윈도우즈 서비스 내에서 사용자 계정 변경하기 (0) | 2019.06.20 |
[C#/COMMON] AppDomain 클래스 : 별도 애플리케이션 도메인에서 특정 어셈블리 로드하기 (0) | 2019.06.18 |
[C#/COMMON] AppDomain 클래스 : 애플리케이션 그림자 복사(Shadow Copy) 사용하기 (0) | 2019.06.18 |
[C#/COMMON] SpeechSynthesizer 클래스 : GetInstalledVoices 메소드를 사용해 설치 음성 목록 구하기 (0) | 2019.06.11 |
[C#/COMMON] UNIX 타임 스탬프 구하기 (0) | 2019.06.09 |
[C#/COMMON] WIN32 API를 사용해 최상위 윈도우 여부 구하기 (0) | 2019.06.06 |
[C#/COMMON] Process 클래스 : 윈도우즈 서비스 실행하기 (0) | 2019.06.06 |
댓글을 달아 주세요