2014년 2월 20일 목요일

12. [C#,닷넷강좌]닷넷어셈블리, C#.NET assembly, 예제작성. C#/WPF/닷넷WPF/ASP.NET/ADO닷넷/닷넷교육/닷넷강좌학원/닷넷공부/닷넷책/닷넷객체지향교육 닷넷 어셈블리 작성 실습 C#으로 간단히 클래스 라이브러리를 만들어 보기로 하자. C:\dotnet\project에 ClassLibrary Project생성 (이름을 Shapes라고 하고 Class1.cs 파일명을 Shapes.cs로 바꾸자 .) [Shapes.cs] using System; namespace Shapes { public class Circle { double radius; public Circle() { radius = 0; } public Circle(double radius) { this.radius = radius; } public double Area() { return System.Math.PI * (radius * radius); } } public class Triangle { double Base; double Height; public Triangle() { Base = 0; Height = 0; } public Triangle(double Base, double Height) { this.Base = Base; this.Height = Height; } public double Area() { return 0.5F * Base * Height; } } } 빌드  솔루션 빌드를 선택하여 Shapes Project를 빌드 하자. 만약 명령 행 이라면 아래와 같이 컴파일 하자. csc /target:library shapes.cs shapes.dll 이 생겼을 것이다.. 어셈블리의 내용 보기 방금 만든 shapes.dll의 내용을 보기로 하자. 이것이 가능 한 것도 이전에 이야기 했던 어셈블리의 자기 서술적 특징 때문이다. 어셈블리의 내용을 보기 위해 사용 할 도구는 .NET framework Intemidiate Language DisAssembler 줄여서 ildasm 으로 어셈블리의 내부 구조를 보는데 유익하다. 우선 ildasm을 VS의 외부 도구에 추가해 보기로 하자. 도구  외부도구를 선택하고 [추가] 버튼을 선택 한 후 [제목]에 ildasm을 입력 하고 [명령] 상자의 오른쪽에 있는 (…)버튼을 클릭 후 C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin의 ildasm 파일을 선택하고 [열기]를 클릭 한 후 [확인]을 클릭 하면 등록이 완료 된다. Ildasm이 추가 되었으면 도구(Tools)  ildasm을 선택 후 File Open을 이용하여 C:\dotnet\project\Shapes\Shapes\bin\Debug\shapes.dll을 선택. <그림 ILDASM 화면> ildasm의 메인 창에 어셈블리의 내용이 나타나는데 매니페스트와 Shape Class가 보이며 Shapes의 방패 아이콘은 네임스페이스를 의미하고 +표시를 클릭하여 확장하면 Circle, Triangle 클래스가 나타난다. 매니페스트 매니페스트는 어셈블리 안의 각 파일 또는 모듈을 서술한다. 특히 매니페스트는 이 어셈블리가 참조하는 외부 어셈블리도 기술한다. 프로그램이 System.Data.dll을 사용 한다면 그 사실이 매니페스트에도 반영이 되는 것 이다. 또한 버전 번호도 유지하므로 프로그램을 새 버전으로 업그레이드 하는데도 작업이 쉬워진다. Shapes.dll의 목록에서 MANIFEST를 더블 클릭하면 아래와 같은 창이 나타날 겁니다. <그림 MANIFEST 화면> shapes.dll의 MANIFEST에는 두개의 .assembly 지시자 들과 하나의 .module 지시자가 있다. .assembly extern mscorlib : 이것은 mscorlib.dll에 대한 외부 어셈블리 참조이며 mscorlib.dll은 .NET framework의 거의 모든 기반 System 클래스를 정의한다. .assembly Shapes 블록은 shapes 어셈블리 자체에 대한 선언이다. .module의 경우 shapes.dll은 하나의 파일만 가지므로 이처럼 하나의 .module 선언만 존재한다. 이번에는 원본 파일을 수정하여 MANIFEST 내용을 확인 해 보자. using System.Drawing; 문을 추가하고 Circle의 Area() 메소드 다음에 다음을 추가 하자. public void Draw() Pen p = new Pen(Color.Red); } 이 소스를 컴파일 할 때 System.Drawing Namespace가 없다고 할 것 이므로 프로젝트에서 참조추가를 선택 해서 System.Drawing.dll을 추가하자. 수정된 파일을 다시 빌드(F6) 후 ildasm을 실행 시키면 System.Drawing에 대한 외부 어셈블리 참조가 추가 되었음을 알 수 있다. 매니페스트(MANIFEST)도 확인하자. [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecCsharp&wr_id=139 자바 오라클/빅데이터 아이폰/안드로이드 닷넷/WPF 표준웹/HTML5 채용/취업무료교육 초보자코스 [기업100%환급]Spring ,MyBatis,Hibernate실무과정 총 5일 40시간 02-24 [기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 총 5일 40시간 03-03 Spring3.X, MyBatis, Hibernate실무과정 총 12일 36시간 03-03 자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 총 24일 72시간 03-14 [주말저녁]자바기초에서JSP,Servlet,Ajax,jQUERY,스프링,마이바티스,하이버네이트 총 18일 72시간 02-22 자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 총 10일 70시간 03-01 Spring3.X, MyBatis, Hibernate실무과정 총 5일 35시간 03-09 


12. [C#,닷넷강좌]닷넷어셈블리, C#.NET assembly, 예제작성. C#/WPF/닷넷WPF/ASP.NET/ADO닷넷/닷넷교육/닷넷강좌학원/닷넷공부/닷넷책/닷넷객체지향교육


닷넷 어셈블리 작성 실습

C#으로 간단히 클래스 라이브러리를 만들어 보기로 하자.

C:\dotnet\project에 ClassLibrary Project생성 (이름을 Shapes라고 하고 Class1.cs 파일명을 Shapes.cs로 바꾸자 .)
 
[Shapes.cs]
using System;
namespace Shapes
{
public class Circle 
{
double radius;

public Circle() 
{
radius = 0;
}

public Circle(double radius) 
{
this.radius = radius;
}

public double Area() 
{
return System.Math.PI * (radius * radius);
}
}

public class Triangle 
{
double Base;
double Height;

public Triangle() 
{
Base = 0;
Height = 0;
}

public Triangle(double Base, double Height) 
{
this.Base = Base;
this.Height = Height;
}

public double Area() 
{
return 0.5F * Base * Height;
}
}
}


빌드  솔루션 빌드를 선택하여 Shapes Project를 빌드 하자. 만약 명령 행 이라면 아래와 같이 컴파일 하자.

csc /target:library shapes.cs

shapes.dll 이 생겼을 것이다..

어셈블리의 내용 보기

방금 만든 shapes.dll의 내용을 보기로 하자. 이것이 가능 한 것도 이전에 이야기 했던 어셈블리의 자기 서술적 특징 때문이다. 어셈블리의 내용을 보기 위해 사용 할 도구는 .NET framework Intemidiate Language DisAssembler 줄여서 ildasm 으로 어셈블리의 내부 구조를 보는데 유익하다. 

우선 ildasm을 VS의 외부 도구에 추가해 보기로 하자. 도구  외부도구를 선택하고 [추가] 버튼을 선택 한 후 [제목]에 ildasm을 입력 하고 [명령] 상자의 오른쪽에 있는 (…)버튼을 클릭 후 C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin의 ildasm 파일을 선택하고 [열기]를 클릭 한 후 [확인]을 클릭 하면 등록이 완료 된다.

Ildasm이 추가 되었으면 도구(Tools)  ildasm을 선택 후 File Open을 이용하여 C:\dotnet\project\Shapes\Shapes\bin\Debug\shapes.dll을 선택.




 <그림 ILDASM 화면>


ildasm의 메인 창에 어셈블리의 내용이 나타나는데 매니페스트와 Shape Class가 보이며 Shapes의 방패 아이콘은 네임스페이스를 의미하고 +표시를 클릭하여 확장하면 Circle, Triangle 클래스가 나타난다.

매니페스트

매니페스트는 어셈블리 안의 각 파일 또는 모듈을 서술한다. 특히 매니페스트는 이 어셈블리가 참조하는 외부 어셈블리도 기술한다. 프로그램이 System.Data.dll을 사용 한다면 그 사실이 매니페스트에도 반영이 되는 것 이다. 또한 버전 번호도 유지하므로 프로그램을 새 버전으로 업그레이드 하는데도 작업이 쉬워진다.  Shapes.dll의 목록에서 MANIFEST를 더블 클릭하면 아래와 같은 창이 나타날 겁니다.




 <그림 MANIFEST 화면>


shapes.dll의 MANIFEST에는 두개의 .assembly  지시자 들과 하나의 .module 지시자가 있다. 


.assembly extern mscorlib  : 이것은 mscorlib.dll에 대한 외부 어셈블리 참조이며 mscorlib.dll은 .NET framework의 거의 모든 기반 System 클래스를 정의한다. 

.assembly Shapes 블록은 shapes 어셈블리 자체에 대한 선언이다.

.module의 경우 shapes.dll은 하나의 파일만 가지므로 이처럼 하나의 .module 선언만 존재한다.


이번에는 원본 파일을 수정하여 MANIFEST 내용을 확인 해 보자.


using System.Drawing; 문을 추가하고 Circle의 Area() 메소드 다음에 다음을 추가 하자.


public void Draw()
Pen p = new Pen(Color.Red);
 }

이 소스를 컴파일 할 때  System.Drawing Namespace가 없다고 할 것 이므로 프로젝트에서 참조추가를 선택 해서 System.Drawing.dll을 추가하자. 


수정된 파일을 다시 빌드(F6) 후 ildasm을 실행 시키면 System.Drawing에 대한 외부 어셈블리 참조가 추가 되었음을 알 수 있다. 매니페스트(MANIFEST)도 확인하자.

댓글 없음:

댓글 쓰기