첨부 소스 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestSolution.zip
다운로드

[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
    }
}

 

728x90

 

[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
    }
}

 

300x250

 

▶ 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
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요