기술과 감성, 그리고.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'2010/02/13'에 해당하는 글(1)
2010/02/13   프로그래밍 방식으로 코드를 컴파일하는 방법


프로그래밍 방식으로 코드를 컴파일하는 방법

.NET Framework에서는 C#이나 VB.NET과 같은 .NET 언어 컴파일러(compiler)에 프로그래밍 방식으로 접근할 수 있도록 해주는 클래스를 제공한다. 이 클래스는 사용자가 런타임(runtime)에 작성한 코드를 즉시 작동 시킬때 유용하다.

.NET Framework에서는 ICodeCompiler 인터페이스(interface)를 통해 컴파일러에 접근할 수 있도록 하고 있다. CSharpCodeProvider, VBCodeProvider 클래스가 각각 이 인터페이스를 지원하고 있는데, 이 클래스를 통해 C# 및 VB.NET 코드를 런타임에 컴파일(compile) 할 수 있다. 본 포스팅(posting)에서는 이중 CSharpCodeProvider를 활용해 C#을 컴파일 할 수 있는 예제를 다룬다. (CSharpCodeProvider 클래스와 VBCodeProvider 클래스는 사용법이 동일하므로 C#예제를 학습하는 것 만으로도 VB.NET을 컴파일 하는데 아무런 어려움이 없을 것이다.)

1. CSharpCodeProvider를 이용해 ICodeCompiler 인터페이스의 객체를 가져온다.

CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();

2. CompilerParameters 클래스를 사용해 ICodeCompiler 인터페이스 객체에 매개 변수(parameter)를 전달한다.

System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);

위 코드에서 SourceString은 컴파일할 소스 코드를 포한하는 문자열의 배열이다.

3. CompilerResults 객체에는 소스 코드를 컴파일 하는 과정에서 발생하는 오류 정보가 포함된다. 오류 정보는 아래와 같은 코드로 확인해 볼 수 있다.

if (results.Errors.Count > 0)
{
    foreach(CompilerError CompErr in results.Errors)
    {
        textBox2.Text = textBox2.Text +
            "Line number " + CompErr.Line +
            ", Error Number: " + CompErr.ErrorNumber +
            ", '" + CompErr.ErrorText + ";" +
        Environment.NewLine + Environment.NewLine;
    }
}
크리에이티브 커먼즈 라이선스
Creative Commons License


BLOG main image
아직 산을 오르는 이유는 산 만한 사람을 만나지 못했기 때문이고 산 만한 사람이 되지 못했기 때문이다.
 Notice
 Category
분류 전체보기 (163)
일상을 늘어놓다 (43)
나를 찾아 떠나다 (53)
마음을 데우다 (18)
최고를 꿈꾸다 (32)
Resume (16)
 TAGS
FA저널 기고문 FA Jurnal MVC패턴 MVC NGF 프레임워크 Pattern MVVM 잡지
 Calendar
«   2010/02   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            
 Recent Entries
동료애, 팀웍(teamwork) 그리고 파트너쉽(P.. (2)
MVC패턴과 그 가계(家系) (4)
[리쿠르트] Trust yourself? or Trust only..
[오감도] S1. His Concern
[패턴] 정의와 의의
[소설] 신의 축복이 있기를, 로즈워터씨
[잡지 기고문] NGF 그리고 프레임워크
이정표
항구
하늘, 초보의 습작품.
 Recent Comments
좋은글 감사합니다...
lee - 14:34
MVVM에서 모델하고..
lee - 13:59
감사합니다 ^^ 정말..
좡이 - 01/12
감사합니다 좋은 글..
디키썬 - 2011
잘 보았습니다~ 페..
김영훈 - 2011
잘보았습니다. 멋진..
주연 - 2011
고맙습니다 ^^
쎄미 - 2011
멋진 글이네요.
dd - 2010
김영하! 아, 정말 말..
Bailar - 2008
어릴때 단양에 다녀..
짱구눈썹 - 2008
 Recent Trackbacks
 Archive
2011/01
2010/08
2010/04
2010/02
2009/03
 Link Site
OnOffMix
전병선, ENSOA
이건복, .NETXPERT
안재우, .NETXPERT
김유철, .NETXPERT
이동범, .NETXPERT
강성재, Microsoft
SmartPlace
류한석, SoftBank
황재선, SoftBank
황순영, Feelanet
정용주, Miracom Inc.
노현종, Miracom Inc.
 Visitor Statistics
Total : 69,432
Today : 8
Yesterday : 18
rss