.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)를 전달한다.
이 프로그램은 .NET Framework 1.1과 WSE 2.0을 기반으로 만들어졌으며, 원격지에 있는 그림 파일을 웹서비스를 이용해 받아볼수 있는 서버와 클라이언트 프로그램으로 구성되어 있다. 여기서는 Base64 인코딩 기반의 이진 파일 전송과 DIME을 이용한 이진 파일 전송 두가지 방법을사용해, 각각의 성능을 측정·비교할 수 있도록 했다.
Track this back : http://maverick.xtorm.net/trackback/46
웹서비스 디스커버리 유틸리티(disco.exe) 사용법
disco.exe는 웹 서버에 있는 XML Web services의 URL을 검색하고 로컬 디스크에 해당 XML Web services와 관련된 문서를 저장하는 유틸리티이다. 이 도구에서 만든 results.discomap, .wsdl 및 .xsd 파일을 wsd l.exe에서 ASP.NET을 사용하여 웹 서비스 클라이언트 및 추상 웹 서비스 서버를 만들 수 있다.
사용법 : disco.exe <options> <url to discover>
- 옵션 - /nologo 배너를 표시하지 않는다.
/nosave 검색된 문서 또는 결과를 디스크에 저장하지 않는다. (예: wsdl, xsd 및 disco 파일) 기본값은 문서를 저장하도록 지정되어 있다.
/out:<directoryName> 검색된 문서를 저장할 출력 디렉토리이다. 기본값은 현재 디렉토리이며, 약식은 '/o:'입니다.
/username:<username> /password:<password> /domain:<domain> 인증을 필요로 하는 서버에 연결할 때 사용할 자격 증명이다. 약식은 '/u:', '/p:', '/d:'입니다.
/proxy:<url> HTTP 요청에 사용할 프록시 서버의 URL이다. 기본값은 시스템 프록시 설정을 사용하도록 지정되어 있다.
/proxyusername:<username> /proxypassword:<password> /proxydomain:<domain> 인증을 필요로 하는 프록시 서버에 연결할 때 사용할 자격 증명이다. 약식은 '/pu:', '/pp:', '/pd:'이다.
Track this back : http://maverick.xtorm.net/trackback/89
웹서비스 유틸리티(wsdl.exe) 사용법
wsdl.exe는 WSDL 계약 파일, XSD 스키마 및 .discomap 검색 문서에서 ASP.NET을 사용하여 웹서비스 클라이언트 및 웹서비스 서버의 코드를 생성하는 유틸리티이다. 이 도구는 disco.exe와 함께 사용할 수 있다.
사용법 : wsdl.exe <options> <url or path> <url or path> ...
- 옵션 - <url or path> - WSDL 계약, XSD 스키마 또는 .discomap 문서에 대한 URL 또는 경로이다.
/nologo 배너를 표시하지 않습니다.
/language:<language> 생성된 프록시 클래스에 사용할 언어를 지정한다. 'CS', 'VB', 'JS' 중에서 선택하거나 'System.CodeDom.Compiler.CodeDomProvider'를 구현하는 클래스에 대해 정규화된 이름을 제공하면 된다. 기본값은 'CS'(CSharp)이며, 약식은 '/l:'이다.
/server 계약을 기반으로 한 ASP.NET을 사용하여 웹서비스 서버 구현을 위한 추상 클래스를 생성한다. 기본값은 클라이언트 프록시 클래스를 생성하도록 지정되어 있다.
/namespace:<namespace> 생성된 프록시 또는 템플릿의 네임스페이스이다. 기본 네임스페이스는 전역 네임스페이스이며, 약식은 '/n:'이다.
/out:<fileName> 생성된 프록시 코드의 파일 이름이다. 기본 이름은 서비스 이름에서 파생되며, 약식은 '/o:'이다.
/protocol:<protocol> 구현할 기본 프로토콜을 재정의한다. 'SOAP', 'HttpGet', 'HttpPost' 또는 구성 파일에 지정한 대로 사용자 지정 프로토콜 중에서 선택한다.
/username:<username> /password:<password> /domain:<domain> 인증을 필요로 하는 서버에 연결할 때 사용할 자격 증명이다. 약식은 '/u:', '/p:', '/d:'이다.
/proxy:<url> HTTP 요청에 사용할 프록시 서버의 URL이다. 기본값은 시스템 프록시 설정을 사용하도록 지정되어 있다.
/proxyusername:<username> /proxypassword:<password> /proxydomain:<domain> 인증을 필요로 하는 프록시 서버에 연결할 때 사용할 자격 증명이다. 약식은 '/pu:', '/pp:', '/pd:'이다.
/appsettingurlkey:<key> 코드를 생성할 때 URL 속성의 기본값을 읽기 위해 사용할 구성키이다. 기본값은 config 파일에서 읽지 않는 것이며, 약식은 '/urlkey:'이다.
/appsettingbaseurl:<baseurl> URL 단편을 계산할 때 사용할 기준 URL이다. appsettingurlkey 옵션도 지정해야 한다. url 단편은 appsettingbaseurl에서 WSDL 문서의 URL에 대한 상대 URL 계산 결과이며, 약식은 '/baseurl:'입니다.
Track this back : http://maverick.xtorm.net/trackback/87
Type Library Importer(tlbimp.exe) 사용법
Type Library Exporter와 반대되는 도구로 Importer는 COM component에 대한 .NET proxy component를 생성하므로, .NET component에서 기존 COM component를 사용할 수 있다. tlbimp.exe를 사용하기 위한 일반적인 문법은 다음과 같다.
사용법 : TlbImp TypeLibName [Options]
/keycontainer:keycontainer keycontainer에 있는 비공개키를 사용하여 결과 assembly에 서명한다. keyfile에 있는 공개키는 assembly의 요약 정보에 사용된다. keycontainer 생성에 대해서는 sn.exe를 참고하면 된다.
/keyfile:keyfile keyfile에 있는 비공개키를 사용하여 결과 assembly에 서명합니다. keyfile에 있는 공개키는 assembly 요약 정보에 사용된다. keyfiletod성에 대해서는 sn.exe를 참고하면 된다.
Track this back : http://maverick.xtorm.net/trackback/86
Type Library Exporter(tlbexp.exe) 사용법
Type Library Exporter와 Importer는 COM의 상호 작용을 위해 필요한 도구이다. Exporter는 .NET Framework Assembly를 위한 Type Library를 생성하므로 다른 COM Component에서 .NET Component에서 상호 작용이 가능하다. tlbexp.exe를 사용하기 위한 일반적인 문법은 다음과 같다.
Track this back : http://maverick.xtorm.net/trackback/85
PE 파일 형식 viewer(dumpbin.exe) 사용법
dumpbin은 새로운 유틸리티가 아니다. 그러나 .NET Framework에서는 확장된 PE 형식을 이용해 IL을 저장하기 때문에, 전체 binary를 export하거나 import할 때뿐만 아니라 실행파일이나 DLL의 구조를 검사할 때 매우 유용하다. 일반적인 형식은 다음과 같다.
사용법 : DUMPBIN [options] [files] /all PE파일의 모든 정보를 표시한다. /exports PE파일의 모든 export를 표시한다. /header PE파일의 모든 header 정보를 표시한다. /imports PE파일을 위한 모든 import 정보를 표시한다.
Track this back : http://maverick.xtorm.net/trackback/84
MSIL 역어셈블러(ildasm.exe) 사용법
이 도구는 .NET Framework에서 실행되는 PE파일로부터 MSIL 코드를 추출한다. 이 도구의 일반적인 사용방법은 다음과 같다.
사용법: ildasm [options] <file_name> [options]
출력 리디렉션 옵션: /OUT=<file name> GUI보다는 파일에 직접 출력한다. /TEXT GUI보다는 콘솔 창에 직접 출력한다.
GUI 또는 파일/콘솔 출력 옵션(EXE 및 DLL 파일에만 해당): /BYTES 16진수 형식의 실제 바이트를 명령 주석으로 표시한다. /RAWEH 예외 처리 절을 원시 형태로 표시한다. /TOKENS 클래스 및 멤버의 메타데이터 토큰을 표시한다. /SOURCE 원본 소스 줄을 주석으로 표시한다. /LINENUM 원본 소스 줄에 대한 참조를 포함한다.
/VISIBILITY=<vis>[+<vis>...] 표시 범위가 지정된 항목만 디스어셈블한다. (<vis> = PUB | PRI | FAM | ASM | FAA | FOA | PSC)
/PUBONLY public 항목만 디스어셈블한다(/VIS=PUB와 같음). /QUOTEALLNAMES 모든 이름을 작은따옴표로 묶는다. /NOBAR 디스어셈블리 진행률 표시줄 창 팝업을 표시하지 않는다.
다음 옵션은 파일/콘솔 출력에만 사용할 수 있다. EXE 및 DLL 파일 옵션: /UTF8 출력에 UTF-8 인코딩을 사용한다(기본값 - ANSI). /UNICODE 출력에 유니코드 인코딩을 사용한다. /NOIL IL 어셈블러 코드 출력을 표시하지 않는다. /HEADER 파일 헤더 정보를 출력에 포함한다.
/ITEM=<class>[::<method>[(<sig>)] 지정한 항목만 디스어셈블한다.
Track this back : http://maverick.xtorm.net/trackback/82
어셈블리 등록 유틸리티(gacutil.exe) 사용법
gacutil.exe를 사용하여 GAC의 내용을 표시할수 있을 뿐만 아니라 어셈블리를 설치하거나 삭제할 수 있다. 다음은 gacutil.exe의 일반적인 사용법이다.
사용법 : Gacutil <option>
<option> -l GAC의 내용을 나열한다.
-lc GAC의 내용을 나열한다.
-i <filename> filename으로 지정한 어셈블리를 GAC에 설치한다.
-u <assemblyname> assemblyname으로 지정한 어셈블리를 GAC에서 삭제한다. 동일한 어셈블리의 여러 버전이 존재하는 경우, 어셈블리 이름 외에 버전을 지전하지 않으면 모든 어셈블리가 삭제된다.(예를 들면> gacutil -u myAssembly, ver=1.0.0.1)