재우니의 블로그



.NET SDK 에는 C#컴파일러인 CSC.EXE는 명령 프롬프트에서 사용할 수 있습니다. 
또한 VS.NET 가 설치되어 있으시면 IDE 환경에서 컴파일 할 수 있죠.

컴파일러의 작동은 명령 라인 인수에 따라 제어가 됩니다. VS.NET 은 IDE 를 통해 컴파일할려고 하면 IDE 는 자신의 설정 사항을 알아서 살펴보고 동적으로 명령 라인 인수와 함께 명령 문자열을 만듭니다. 그리고 문자열을 사용하여 csc.exe 프로세서를 실행시키죠. vs.net 과 같은 IDE 를 사용하면 시간을 절약해 주겠지만, 명령프롬프트 옵션을 통해서도 빌드 과정은 스크립트, 배치파일등을 사용하여 자동화될 수 있죠.

다시 말씀드리면 c#컴파일러는 기계어 코드를 생성하지 않고 오직 IL인 중간언어로 컴파일됩니다. IL 인 중간언어를 기계어 코드로 번역하는 것은 닷넷런타임이 하는 것이죠.


c# 컴파일러 명령 프롬프트에서 사용할때 소스 파일의 이름을 컴파일러 csc 다음에 기재해 주시면 됩니다.

csc /out:TargetFile.exe SourceFile.cs



SourceFile.cs 파일이 c# 원본 파일입니다. 컴파일을 TargetFile.exe로
파일의 이름을 명시할 수도 있답니다.


/target 옵션을 통해 c# 컴파일러가 어떤 종류의 프로젝트를 빌드해야 하는지 명시해 줄 수 있답니다.

1) /target:exe 인수를 설정하면 c#컴파일러는 콘솔응용프로그램을 생성
2) /target:winexe 인수를 설정하면 Windows 폼 응용프로그램을 생성
3) /target:library 인수를 설정하면 매니페스트를 포함하는 단독 어셈블리를 생성합니다.
4) /target:module 인수를 설정하면 매니퍼스트가 없는 어셈블리 파일을 생성합니다.

/target 을 줄여서 /t로 쓸 수 있답니다.


c# 파일을 아래와 같이 코딩해 보고, .NET DLL 로 컴파일을 해보죠.

==== Example1 ===

//Csharp.cs
namespace Csharp.Zoa.To
{
    public class Math
   {
         public int Add(int x, int y)
         {
              return x + y;
         }
   }
}


컴파일 하는 방법을 보죠. 참고로 위의 소스는 Main() 메소드가 없습니다. 이런것들은 라이브러리로 만듭니다. 참조용으로 함수들을 따로 빼서 만들어서 사용하기 때문이죠.


c:\>csc /t:library Math.cs

해당 위의 명령어를 실행하게 되면 해당 폴더에 Math.dll 파일이 생성됩니다. ^^; 이는 라이브러리 파일이므로 실행하지 못합니다. 이제 라이브러리 안에 있는 함수를 호출하기 위해서 Main() 메소드가 존재하는 소스를 구현해 보죠.

먼저 객체를 인스턴스화 해서 Math.dll 안에 존재하는 Add() 메소드를 호출하고 결과를 얻어보죠. 이는 public 접근자로 되어 있어서 접근이 가능한겁니다. private 접근자는 외부에서 참조가 불가능합니다.

======= example2 ====

using System;

namespace Csharp.Zoa.To
{
     class Client
     {
         public static int Main()
        {
                Math math = new Math();
                Console.WriteLine(math.Add(5,6));
                return 0;
        }
     }
}


example1에 새롭게 컴파일된 dll 파일에  Math.dll 을 참조하기 위해서 /r 스위치를 이용하여 컴파일을 합니다.

c:\>csc Clinet.cs /r:Math.dll



posted by 심재운 (shimpark@gmail.com)