기술과 감성, 그리고.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'최고를 꿈꾸다/.NET Framework'에 해당하는 글(16)
2010/02/13   프로그래밍 방식으로 코드를 컴파일하는 방법
2008/05/06   DIME 테스트 프로젝트
2008/04/23   웹서비스 디스커버리 유틸리티(disco.exe) 사용법
2008/04/22   웹서비스 유틸리티(wsdl.exe) 사용법
2008/04/18   공유 이름 유틸리티(sn.exe) 사용법
2008/04/17   Type Library Importer(tlbimp.exe) 사용법
2008/04/16   Type Library Exporter(tlbexp.exe) 사용법
2008/04/14   PE 파일 형식 viewer(dumpbin.exe) 사용법
2008/04/13   MSIL 역어셈블러(ildasm.exe) 사용법
2008/04/11   어셈블리 등록 유틸리티(gacutil.exe) 사용법


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

.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


DIME 테스트 프로젝트

이 프로그램은 "웹서비스에서의 이진파일 전송"이라는 블로그 글에 첨부된 논문을 작성할때 테스트 용으로 작성된 프로그램이다.


이 프로그램은 .NET Framework 1.1과 WSE 2.0을 기반으로 만들어졌으며, 원격지에 있는 그림 파일을 웹서비스를 이용해 받아볼수 있는 서버와 클라이언트 프로그램으로 구성되어 있다.
여기서는 Base64 인코딩 기반의 이진 파일 전송과 DIME을 이용한 이진 파일 전송 두가지 방법을사용해, 각각의 성능을 측정·비교할 수 있도록 했다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK, base64, DIME, 웹서비스


웹서비스 디스커버리 유틸리티(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:'이다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK, Disco


웹서비스 유틸리티(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:'입니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK, WSDL


공유 이름 유틸리티(sn.exe) 사용법

컴포넌트가 최종적으로 GAC에 위치되기 때문에, 이들 컴포넌트의 고유한 이름을 sn.exe로 만들 필요가 있다. 모든 공유 컴포넌트는 비공개키로 서명되어 공개키와 함께 배포된다. 다음은 sn.exe의 일반적인 사용법이다.

사용법: SN [-q(uiet)] <option> [<parameters>]

-d <container>
  <container> 키 컨테이너를 삭제한다.

-D <assembly1> <assembly2>
  <assembly1>과 <assembly2>가 서명만 다른지 확인한다.

-e <assembly> <outfile>
  <assembly>의 공개 키를 <outfile>로 추출한다.

-i <infile> <container>
  <infile>의 키 쌍을 <container> 키 컨테이너에 설치한다.

-k <outfile>
  새 키 쌍을 생성하여 <outfile>에 쓴다.

-m [y|n]
  키 컨테이너가 사용자를 기반으로 하지 않고 컴퓨터를 기반으로 하는지 활성화하고(y), 비활성화하고(n) 또는 확인한다(매개 변수 없음).

-o <infile> [<outfile>]
  <infile>의 공개 키를 추출하여 10진 바이트 값을 쉼표로 구분하는 <outfile> 텍스트 파일로 변환한다. <outfile>을 생략하면 텍스트가 클립보드에 복사된다.

-v[f] <assembly>
  강력한 이름 서명 자체에 일관성이 있는지 <assembly>을(를) 확인한다.

/h or /?
  도움말을 표시한다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK


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를 참고하면 된다.

/nologo
  tlbimp 실행파일의 로고를 표시하지 않는다.

/out:filename
  filename은 type library 파일의 이름이다.

/silent
  tlbimp 실행파일에서 표시하는 모든 메시지를 표시하지 않는다.

/unsafe
  .NET Framework의 보안검사를 하지 않고 인터페이스를 생성한다.

/verbose
  component를 변환하는 동안 부가 정보를 표시한다.

/? 또는 /help
  도구에 대한 도움말 정보를 표시한다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK


Type Library Exporter(tlbexp.exe) 사용법

Type Library Exporter와 Importer는 COM의 상호 작용을 위해 필요한 도구이다. Exporter는 .NET Framework Assembly를 위한 Type Library를 생성하므로 다른 COM Component에서 .NET Component에서 상호 작용이 가능하다. tlbexp.exe를 사용하기 위한 일반적인 문법은 다음과 같다.

사용법 : TlbExp AssemblyName [Options]

/nologo
  tlbexp 실행파일의 로고를 표시하지 않는다.

/out:filename
  filename은 type library 파일의 이름이다.

/silent
  tlbexp 실행파일에서 표시하는 모든 메시지를 표시하지 않는다.

/verbose
  component를 변환하는 동안 부가 정보를 표시한다.

/? 또는 /help
  도구에 대한 도움말 정보를 표시한다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK


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 정보를 표시한다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK, PE


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>)]
  지정한 항목만 디스어셈블한다.

/ALL               /HEADER, /BYTES, /TOKENS의 조합한다.


옵션 키는 '-' 또는 '/'이다. 옵션은 처음 3자로 인식된다.

예: ildasm /tok /byt myfile.exe /out=myfile.il

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK


어셈블리 등록 유틸리티(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)

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : .NET FRAMEWORK


BLOG main image
아직 산을 오르는 이유는 산 만한 사람을 만나지 못했기 때문이고 산 만한 사람이 되지 못했기 때문이다.
 Notice
 Category
분류 전체보기 (163)
일상을 늘어놓다 (43)
나를 찾아 떠나다 (53)
마음을 데우다 (18)
최고를 꿈꾸다 (32)
Resume (16)
 TAGS
FA저널 기고문 FA Jurnal MVC패턴 MVC NGF 프레임워크 Pattern MVVM 잡지
 Calendar
«   2012/05   »
    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 29 30 31    
 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 : 72,373
Today : 24
Yesterday : 20
rss