첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ CodeDomProvider 클래스 : 동적 컴파일 사용하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


MainForm.cs

 

 

using System;

using System.CodeDom.Compiler;

using System.Text;

using System.Windows.Forms;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            this.createButton.Click += createButton_Click;

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region 생성 버튼 클릭시 처리하기 - createButton_Click(sender, e)

 

        /// <summary>

        /// 생성 버튼 클릭시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void createButton_Click(object sender, EventArgs e)

        {

            string code = @"

using System;

 

namespace TestProject

{

    class Program

    {

        private static void Main()

        {

            System.Console.WriteLine(""Hello World!"");

 

            System.Console.WriteLine(""Press the Enter key to continue."");

 

            System.Console.ReadLine();

        }

    }

}"

;

 

            CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("c#");

 

            CompilerParameters compilerParameters = new CompilerParameters();

 

            compilerParameters.GenerateExecutable = true;

            compilerParameters.OutputAssembly     = @"d:\TestProject.exe";

 

            CompilerResults compilerResults = codeDomProvider.CompileAssemblyFromSource(compilerParameters, code);

 

            if(compilerResults.Errors.Count > 0)

            {

                StringBuilder stringBuilder = new StringBuilder();

 

                foreach(CompilerError error in compilerResults.Errors)

                {

                    stringBuilder.AppendLine(error.ToString());

                }

                    

                this.messageTextBox.Text = stringBuilder.ToString();

            }

            else

            {

                this.messageTextBox.Text = "SUCCESS";

            }

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요