Introduction
프로젝트의 규모가 커질수록 빌드속도도 매우 느려진다. 이를 극복하기 위해 각각의 View들을 모듈화 하여 DLL로 만들어 한부분의 수정이 있을시 그 부분이 속한 프로젝트만 Build를 하면 되도록 분리하는 방법

Solution

1.Business Application 생성

 

2. RiaService를 한곳으로 참조받기 위한 CommonModule Project생성하고 메인 프로젝트(MusicStore)에서 참조추가한다.

 

3. CommonModule 프로젝트의 속성에서 WCF RIA Services like를 연결

 

4. 빌드를 해보면 CommonModule에서 RegistrationService가 없다고 오류가 생긴다
The type or namespace name 'Resources' does not exist in the namespace 'MusicStore.Web' (are you missing an assembly reference?) C:\Users\Administrator\Desktop\MusicStore\CommonModule\Generated_Code\MusicStore.Web.g.cs

- 이는 새로만든 CommonModule에는 기본 Tamplate에서 제공하는 Web단에 있는 Registration관련 서비스와 맵핑되는 SilverLight단의 리소스가 없어서 생기는 문제이다. 기본 프로젝트에는 아래와 같이 리소스가 등록되어 있기 때문에 문제가 생기지 않는다.

SilverLight의 기본 회원가입 템플릿을 이용하려면 이를 CommonModule로 복사해 주면 되고 이를 사용하지 않으려면 Web프로젝트에서 회원가입관련 서비스 자체를 지워 버리면 된다. 이 포스팅에선 서비스를 지우는 방법으로 진행해 보겠다.

 


5. Web프로젝트에서 UserRegistrationService.cs 파일 삭제

 

6. 삭제를 하고나면 SilverLight기본 프로젝트에 인증과 관련된 UI와 모델들을 삭제해야 한다.
- Views/Login 내의 로그인관련 UI들
- MainPage에서 삭제한 로그인관련 UI를 사용한 부분
- Models/ LoginInfo.cs , RegistrationData.partial.cs, 파일
* Models/User.partial.cs 은 User를 확장해 사용해야한다면 CommonModule로 옮긴다.

 

7. 이제 CommonModule를 통하여 RiaService를 이용할 것이므로 메인 프로젝트(MusicStore)에서 WCF RIA Services link 제거한 후 빌드를 한다

 

8. 빌드를 하게되면 WebContext에서 오류가 생긴다.

오류가 생기는 이유는 7번에서 메인 프로젝트의 WCF RIA Services link를 제거해서 자동생성 되던 WebContext코드가 생성되지 않기 때문이다.
1) 다시 메인 프로젝트의 링크를 연결한다
2) 아래와 같이 WebContext Class의 자동생성 코드를 확인하고 CommonModule로 옮긴다.

3) 다시 메인 프로젝트의 WCF RIA Services link를 해지한다.
4) 메인프로젝트의 WebContext참조경로를 CommonModule.WebContext로 변경한다.

 


9. 프로젝트를 실행시켜보면 아래와 같이 오류가 생긴다.
이유는 ---------------- 때문이다.
그래서 아래와 같이 App.xaml.cs에  Application_Startup 메소드에 초기 셋팅 로직을 추가해준다.

 

10. 하나의 모듈을 새로 만들어 본다.
1)  AlbumModule 프로젝트를 추가하고 메인 프로젝트(MusicStore)에서 참조추가를 한다.

2) AlbumModule에서 CommonModule을 참조추가 한다.
3) 페이지를 하나 만든다.

 

11. 메인 프로젝트에서 Module의 페이지로 링크되도록 경로 설정
/[프로젝트명];component/[페이지경로]

 

12. 결과가 잘 나오는 것을 확인한다. 



Posted by 백운성
,