실버라이트 프로젝트 생성하면서 하는 실수
 
실버라이트 프로젝트는 두 가지를 제공합니다. “Silverlight 응용 프로그램” 과 “Silverlight 클래스 라이브러리” 두 가지의 프로젝트 타입을 제공합니다.
 
저도 요즘 회사에서 실버라이트를 만지고 있는데, 매번 반복하는 실수가 있답니다. Silverlight Application 프로젝트를 만들려고 이름을 입력하고 엔터키를 누르면 Silverlight Class Library 프로젝트가 만들어 질 때가 있습니다. 가끔 무의식적으로 이런 실수를 반복하고 있답니다. ^^;
 
[그림1] 실버라이트 프로젝트 생성 화면
 
한번씩 실수로 프로젝트가 생성이 되면 매번 프로젝트가 생성된 폴더를 지워주어야 하고, 솔루션 파일이 변경이 되기 때문에 폴더에 락(Lock) 이 걸리는 경우도 있어 불편하더군요.
 
 
실버라이트용 클래스 라이브러리와 응용 프로그램의 차이
 
우선 두 프로젝트의 가장 큰 차이는 빌드 시에 .xap 파일로 패키징(Packaging) 을 하느냐 하지 않느냐가 가장 큰 외관적인 차이라고 할 수 있습니다. Silverlight Class Library 는 .DLL 로 Output 이 나오고, Silverlight Application 은 .XAP 으로 패키징(Packaging) 이 되죠.
 
프로젝트의 속성에서도 차이를 보입니다.
 
[그림2] 실버라이트 클래스 라이브러리 프로젝트 속성 화면
 
[그림3] 실버라이트 응용 프로그램 프로젝트 속성 화면
 
보시다시피 출력 어셈블리나 내용(Contents) 를 패키징(Packaging) 의 여부가 바로 가장 큰 차이라고 할 수 있습니다.
 
 
실버라이트용 클래스 라이브러리 프로젝트를 응용 프로그램으로 변경하기
 
가끔씩 실수로 잘못 생성된 Silverlight Class Library 를 Silverlight Application 프로젝트로 변경하기 위해서 몇 가지 작업만 해주면 됩니다.
 
Silverlight Class Library 의 .csproj 파일을 열어 아래의 그림의 XML Element 를 추가해 줍니다.
 
[그림4] Silverlight Application 프로젝트로 변환 방법
 
그리고 [그림4] 와 같이 XML Element 를 추가합니다. XapOutputs 와 XapFilename 만 적절히 넣어주시면 됩니다. 만약 프로젝트 속성 화면에서 이 값을 편집 가능하게 하고 싶다면, SilverlightApplication 의 Value 값을 True 로 변경해주기만 하면 됩니다.
 
그럼 이후 빌드부터 Output 은 .DLL 을 .XAP 으로 패키징(Packaging) 하게 된답니다.
 
 
간단하지만 복잡한 내부 원리
 
Project Type
Visual Studio 는 다양한 형태의 프로젝트를 지원합니다. 예를 들어, C#, VB.NET 으로 개발할 수 있는 프로젝트가 있고, 설치(Setup)프로젝트 나 SQL Server 프로젝트 그리고 다양한 다이어그램(Diagram) 프로젝트를 제공합니다. 바로 이런 프로젝트 형식을 Project Type 이라고 합니다.
 
Project Sub Type
Project Sub Type 은 중요한 개념입니다. Project Sub Type 은 Project Type 의 파생 프로젝트 입니다. 우리가 C# 으로 Windows Forms, Web Forms, Silverlight 등을 개발할 수 있는 것도 바로 Project Sub Type 이 있기 때문입니다.
 
Visual Studio 의 모든 구성 요소는 고유의 GUID 값을 가지고 있습니다. [그림4] 에서도 알 수 있듯이 Silverlight Project Sub Type 은 {A1591282-1198-4647-A2B1-27E5FF5F6F3B} 인 것을 알 수 있습니다. 그 뒤의 GUID 은 Language 의 GUID 입니다.
 
이러한 Project Sub Type 은 Visual Studio 의 Project Factory 로 구현할 수 있으며, IVsProjectFactory 와 IVsPropertyPage를 구현하여 Flavored Project 를 만들 수 있습니다. 그리고 프로젝트의 추가적인 속성 값을 유지하기 위해 IVsProjectFlavorCfg, IPersistXMLFragment, IVsDeployableProjectCfg 등의 복합적으로 인터페이스를 구현해야 합니다.
 
이러한 패키지(Package) 는 레지스트리(Registry) 의 고유의 GUID 값으로 저장되고 Visual Studio 에서 고유한 Project Sub Type 이 로드가 되면 다양한 빌드 방법 또는 프로젝트 관리 방법 등이 적용 됩니다. 그리하여 우리는 Visual Studio 에서 Silverlight 개발을 할 수 있게 됩니다.
 
예를 들어, 이런 방법을 통해 Silverlight 프로젝트가 빌드 시에 .XAP 패키징 파일의 압축률 등을 선택하여 적용하게끔 할 수 있는 추가 구성 요소를 제공할 수도 있겠죠?
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by 땡초 POWERUMC

댓글을 달아 주세요