Creative Commons License

Community

공지/뉴스
지식공유
질문/답변
자료실
자유로운 글
방명록

공유를 넘어 교류로... 제가 알리는 말씀 및 사이트 이용자들이 함게 참여하는 커뮤니케이션 공간입니다.

.

지식공유

여러분들의 개발 관련 기술이나 팁을 공유해 주세요~ 자신이 가진 작은 팁 하나가 어떤이에게는 몇 일을 삽질하게 만드는 것일 수 있습니다 ^^

.NET Compiler(csc.exe)

작성자 허둥9단
작성일 2008-11-24 오후 4:40:24,    조회수 : 2879

.NET Compiler(csc.exe)

 

VS.NET은 디자인 타임 편집기, 코드마법사, 구성 대화상자 등과 같은 기능들을 이용해 타이핑 시간을 줄여주는 것에 지나지 않는다.

VS.NET을 이용해서 응용 프로그램을 빌드하는 것은 결국 C# 컴파일러에게 *.cs 입력 파일을 조작하는 방법을 지시하는 것과 같다.

이런 의미에서 개발자가 back단에서 컴파일이 어떻게 일어나는지 알아보는 것과 VS.NET 툴을 사용하지 않고 개발을 해 보는 것이 도움이 될 것이라 생각한다.

 

1. .NET Framework 설치

 

Csc.exe .NET SDK가 올바로 설치될 때 정상적으로 구성된다.

설정이 올바로 적용되었는지 확인하기 위해서는 .NET Framework 설치 폴더에서 cmd창을 열어 csc -? 를 입력하여 테스트 할 수 있다.(csc : C Sharp Compiler)

만일 csc 를 인식할 수 없는 에러가 발생한다면 path를 지정해 주지 않았기 때문이다.

내컴퓨터 속성 ? 고급 ? 환경변수 에 Path를 더블클릭 한 후 아래 내용을 추가한다.

 

…;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(.NET SDK 버전)

 

2. CSC.EXE 옵션

 

그럼 csc.exe 컴파일러를 이용하여 c#응용 프로그램을 빌드하여 TestApp.exe 라는 실행파일을 만들어 볼 것이다.

 

우선 c# 컴파일러의 주요 옵션들에 대해 알아보자.

 

입력 플래그

정의

/recurse

프로젝트의 하위 디렉터리 구조에 있는 C# 파일을 컴파일하도록 csc.exe에 알린다.

이 플래그는 와일드카드 구문을 지원한다.

/reference (/r)

현재 컴파일에서 참조할 외부 어셈블리를 지정하는 데 사용된다.

/addmodule

다중 파일 어셈블리에 포함할 모듈을 지정하는 데 사용된다.

[ 1]c# 컴파일러 입력 옵션

출력 플래그

정의

/out

생성할 어셈블리 이름을 지정한다. 이 플래그를 생략하면 출력 파일 이름은 *.dll 어셈블리의 경우에는 초기 입력 파일 이름을 기반으로, *.exe 어셈블리의 경우에는 Main() 메서드를 정의하는 클래스를 기반으로 지정된다.

/target (/t)

만들 어셈블리의 파일 형식을 지정한다.

/doc

XML 문서 파일을 생성하는 데 사용된다.

/delaysign

강력한 이름의 서명 연기를 사용하여 어셈블리를 빌드할 수 있도록 한다.

/keyfile

어셈블리에 강력한 이름을 지정하는 데 사용되는 *.snk 파일 경로를 지정한다.

/keycontainer

*.snk 파일을 포함하는 컨테이너의 이름을 지정한다.

/platform

어셈블리를 호스트하는 데 필요한 CPU(x86, Itanium, x64, anycpu)를 지정한다. 기본값은 anycpu이다.

[ 2]c# 컴파일러 출력 옵션

입력/출력 옵션 중 가장 다양하게 활용되는 옵션은 /target이다. 이 플래그는 사용자가 추가 장식을 사용함으로써 생성하려는 .NET 어셈블리 형식을 컴파일러에 알린다.

Target 장식

정의

/target:exe

콘솔 기반 어셈블리를 만든다. /target 옵션이 지정되어 있지 않은 경우의 기본값이다.

/target:winexe

Windows Forms 기반 실행 가능 어셈블리를 만든다. /target:exe를 사용하여 Windows Forms 응용 프로그램을 만들 수는 있지만, 콘솔 창은 기본 폼의 배경에 희미하게 표시된다.

/target:library

.NET 코드 라이브러리(*.dll) 빌드에 사용된다.

/target:module

다중 파일 어셈블리의 일부가 될 모듈을 만든다.

[ 3]c# 컴파일러 /target 상세 옵션

 

3. CSC.EXE 사용

 

그럼 컴파일 하기 위해 Notepad를 열어 간단한 C# 프로그램을 만들어 보자.

 

[
그림 1]C# 예제 프로그램

 

[그림 1] 소스코드를 TestApp.cs 라는 이름으로 저장한다.

이제 실행 파일(TestApp.exe)을 만들기 위해 명령 창에 아래와 같은 명령을 실행해 보자.

 

Csc /target:exe TestApp.cs

 

위 명령에서 /target 대신 /t 와 같이 약어를 사용할 수 있다.

 

사실 /t:exe c# 컴파일러가 사용하는 기본 출력이므로 이 명령을 생략하고 아래처럼 실행해도 같은 결과가 나타난다.

 

Csc TestApp.cs

 

이와 같이 단일 클래스 파일을 빌드하여 응용 프로그램을 만들었다.

 

4. 외부 어셈블리 참조하기

 

단일 외부 어셈블리 참조

 

외부 .NET Assembly 형식을 사용하는 응용 프로그램을 어떻게 만드는지 알아보자.

외부 어셈블리 참조 과정을 알아보기 위해 TestApp.cs 를 수정하여 테스트를 진행해 보자.

 

[
그림 2]외부 어셈블리 참조 예제 프로그램

 

[그림 2]코드는 System.Windows.Forms 외부 닷넷 어셈블리를 참조하였다.

이 어셈블리의 MessageBox 객체를 이용하여 메시지 박스로 Hello를 출력하는 예제이다.

Csc.exe 명령어의 /reference 플래그(/r)를 이용하여 어셈블리를 지정해 줘야 한다.

 

CSC /r:System.Windows.Forms TestApp.cs

 

다중 외부 어셈블리 참조

 

여러 개의 외부 어셈블리를 참조해야 하는 경우 세미콜론을 이용하여 각각의 어셈블리를 적어주면 된다. 다중 외부 어셈블리 참조의 예는 아래와 같다.

 

Csc /r:System.Windows.Forms.dll;System.Drawing.dll /out:TestApp.exe *.cs

 

*.cs는 해당 디렉토리에 있는 모든 cs 파일을 컴파일 한다는 의미이다.

 

5. XML 문서 기능 사용하기

 

소스 코드를 XML로 문서화하기 위해 /doc 옵션을 이용할 수 있다.

아래와 같은 명령을 실행하므로써 TestApp.xml 파일을 얻을 수 있다.

 

Csc TestApp.cs /doc TestApp.xml

 

6. csc.exe 지시 파일로 작업하기

 

만일 웹 사이트를 개발할 경우 명령 창에 입력해야 할 명령어들이 굉장이 많을 것이다.

타이핑의 부담을 덜 수 있도록 C#컴파일러는 지시파일을 인식할 수 있게 만들어졌다.

C# 지시 파일에는 컴파일 시 사용되는 모든 명령어를 적어 둘 수 있다.

확장자가 rsp인 이 파일은 명령창에서 수많은 플래그들을 쉽게 등록할 수 있다.

 

예로써 아래 코드를 TestApp.rsp 라는 이름의 지시 파일을 만들어 보자.(주석=#)

 

#TestApp.exe 지시 파일

/r:System.Windows.Forms.dll

/target:exe /out:TestApp.exe *.cs

 

이 파일을 컴파일 할 파일과 같은 경로에 둔 후 아래 명령어를 실행하면 정상적으로 동작한다.

 

Csc @TestApp.rsp

 

필요하다면, 여러 개의 rsp를 지정할 수도 있다. 여러 개를 지정할 때 염두해 두어야 할 점은 컴파일러가 명령 옵션을 순서대로 처리한다는 것이다.

 

기본 지시 파일(csc.rsp)

 

C#컴파일러는 기본 지시 파일을 아래의 경로에 가지고 있다.

 

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.rsp

 

Csc.exe를 이용해 빌드할 때 위 파일이 자동 참조된다.

참고로 csc.rsp 를 자동적으로 읽지 않게 하려면 /noconfig 플래그를 지정하면 된다.

∵Commented by - at 2010-08-10 오후 10:43:56  
좋은 내용이라 퍼갑니다. 고맙습니다.
이름
비밀번호
홈페이지
WL <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요