(연관된 글이 1개 있습니다.)
vs2010 에서 WPF 응용 프로그램으로 생성된 솔루션이 있습니다.
솔루션 내에 Output Type이 Windows Application인 프로젝트 A와 B가 있습니다.(프로젝트 타입은 WPF Application 입니다.)
이 중 A의 내용을 통째로 가져와 B가 실행 될 때 띄워야하는데요.
(실제로는 꽤나 복잡한 작업들이 중간에 들어가있습니다.)
그래서 B 프로젝트에서 A를 참조한 후 App.xaml.cs 에서 OnStartup메서드에서 A를 생성하고 Show()하도록 만들었습니다.
작업 후 빌드가 완료 되고
일단 B를 실행 시켰을 때
의도했던 대로 동작을 잘 합니다.
그런데 문제는 Class Library가 아닌 Application 을 참조하다보니
B의 빌드 생성 파일에 A의 실행 파일도 함께 생성된다는 점입니다.
이를 테면
A 제품을 만들고 A의 라이트 버전(혹은 기능 제한 버전)으로 B를 만든 경우
패키징을 위해 B 프로젝트를 단독으로 생성해야하는 상황입니다.
제품으로 내보내야할 라이트 버전에 본 버전이 함께 들어가는 상황인 셈이죠.
그래서 크게 고민한 건 두가지 방법입니다.
하나는, 위에서 언급한 A 프로젝트를 참조하는 방법입니다.
장점은 A의 소스가 그대로 B에 반영된다는 점과 작업량이 크지 않는 점입니다.
단점은 B 패키지에 A 실행 파일이 첨부된다는 문제 입니다.
또 B에 필요치 않은 기능이 추가될 경우 일일이 분기를 해야하는다는 부담도 있습니다.
두번째는, 아예 새롭게 B를 만드는 방법입니다.
장점은 A와 관계 없이 B를 조작할 수 있다는 점입니다. 의존성이 그나마 낮아질 수 있다고 봅니다.
단점은 A의 기능이나 버그 수정 시 B에도 추가 작업을 해줘야한다는 부담과 버전관리의 어려움입니다.
처음부터 라이트 버전을 염두에 두고 A를 만든 것이 아니라 구조적으로 매우 나쁜 방향이긴 합니다.
게다가 프로젝트의 덩어리가 크다보니 A의 소스를 적당히 B에 땡겨 쓸 수 있는 상황도 아닙니다.
결국 Copy&Paste를 해야하는 상황인데, 이것 역시 만만치 않은 작업이라 좀 더 고민을 해봐야하는 상황입니다.
라이트 버전이 비지니스에서 제한되고 단점을 해결할 수 있다면
첫번째 방법도 나쁘지 않을 거라고 예상하고 있습니다.
그래서 일단은 첫번째 방법을 작업을 진행해 놓은 상태 입니다.
*만약 첨부된 A의 실행 파일을 사용자가 직접 실행할 수 없는 형태로 만들 수 있는 방법이 있을까요?*
첫번째 방법으로 갔을 경우 결국은 이 문제만 해결되면 수월하게 진행될 수 있다고 생각합니다.
(vs2010 설정 만으로는 이미 생성되어있는 프로젝트의 실행파일을 조작하기 힘드네요.)
(A 프로젝트는 해당 솔루션의 다른 프로젝트들과 참조를 많이 걸고 있어서 그냥 Output Type을 Class Library로 변경할 수 없는 상황입니다.)
CruiseControl.net을 사용 중이라 빌드 결과물을 패키징 할 때 뭔가 조치를 취할 수 있을 것 같긴 한데
물론 빌드 결과물에서 그렇게 설정되는 게 가장 최상이라 그 방법을 찾는 중입니다.
평소 유용한 정보들 전해 주셔서 자주 들렀는데
구글링 해봐도 적당한 방법을 못 찾아서 이렇게 질문 드립니다.
답변 부탁드려도 될까요?
덧, 첨부된 파일은 그냥 상황이 이렇다 정도 설명하는 파일입니다.
[연관 글]
[최초 등록일: ]
[최종 수정일: 2/9/2011]