반응형
* C# 소스코드를 동적으로 컴파일 하는 예제
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.CodeDom.Compiler;
using System.Runtime.InteropServices;
namespace CSharp_동적컴파일
{
public partial class Form1 : Form
{
//API 선언 (다른 프로그램 실행 시키키 위한 변수)
[DllImport("Shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
public Form1()
{
InitializeComponent();
textBox1.Text = @"using System;
namespace Zmeun.CodeDom
{
class CodeDomTest
{
static void Main(string[] args)
{
System.Console.WriteLine(""Hello World!"");
System.Console.WriteLine(""Press the Enter key to continue."");
System.Console.ReadLine();
}
}
}";
}
private void button1_Click(object sender, EventArgs e)
{
CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("c#");
CompilerParameters compilerParameters = new CompilerParameters();
//.GenerateExecutable 이값을 'false'로 하면 dll로 출력됨
compilerParameters.GenerateExecutable = true;
//컴파일 된 EXE 파일 출력 Path
compilerParameters.OutputAssembly = @"c:\test.exe";
CompilerResults compilerResults = codeDomProvider.CompileAssemblyFromSource(compilerParameters, textBox1.Text );
if (compilerResults.Errors.Count > 0)
{
textBox1.Text = compilerResults.Errors[0].ToString();
}
else
{
textBox1.Text = "성공";
}
//컴파일된 프로그램 실행 시키기...
ShellExecute(this.Handle, "open", "C:\\test.exe", "", "", 4);
}
}
}
반응형
'C# Programming' 카테고리의 다른 글
[C#] INI File Create & Read & Write (0) | 2019.09.24 |
---|---|
[C#] 레지스트리(Registry) Create , Read, Write, Delete (0) | 2019.09.22 |
[C#] 객체 파일 저장 및 불러오기 예제 (Serialization) (0) | 2019.09.19 |
[C#] 구조체 를 바이트 배열로 또는 바이트 배열을 구조체로 변환 (0) | 2019.09.18 |
[C#] 크로스 스레드 (Cross Thread) 예제 (0) | 2019.09.15 |