오늘은 땡스빌을 외치며 시작하죠. 그리고 코드 플렉스에도 감사를.
개발자를 지긋지긋하게 괴롭히는 것 중 하나는 문서 작업이죠. 어쩌겠습니까 뭐.
최근에 회사에서 라이브러리를 정리하면서 '위키로 라이브러리를 정리하자!'하고 막상 위키를 개설해 놨더니… 뭐 결과는 다 아시잖아요? 문서 만드는게 죽도록 귀찮은 일이라서…
음음.
그래서 한동안 잊고 있었던 샌드캐슬 프로젝트를 혹시나 하고 기웃거려 봤더니 코드플렉스로 죄다 이사를 갔더군요. 그리고 기대를 져버리지 않고 닷넷 3.5까지 잘 지원을 하고 있었어요. 앗싸~
여튼, 슬슬 이 글 쓰는 것도 귀찮아지고 있어서 아주 초간단하게 준비물과 해야 할 일을 주욱 늘어놓고 끝내도록 하죠.
와우, 죄다 코드 플렉스로 이사갔네요. 요즘은 마이크로소프트랑 관계된 오픈 소스 프로젝트는 거의 대부분 코드 플렉스에 있는 것 같아요.
간단하게 설명하자면 Sandcastle은 일종의 라이브러리이고 Sandcastle을 사용하여 여러 가지 프로젝트들이 각기 다른 방법으로 문서화나 빌드를 하는 툴 혹은 프로젝트를 진행하고 있죠.
실제로 사용할 툴은 Sandcastle Help File Builder(SHFB) 또는 DocProject에서 진행하고 있는 건데요 서로 다른 특성을 가지고 있어요.
SHFB는 GUI 툴로 프로젝트 파일을 추가하고 연관된 어셈블리 들을 넣어주면 헬프 파일을 만들어주는데 단점은 의존성 있는 어셈블리를 일일이 추가해 줘야 한다는 것과 편집 옵션이 전체 헬프 파일 서머리와 네임스페이스 별 서머리만을 지원하고 나머지는 그냥 기본이라는 점. (이 외에 다른 방법이 있는 것 같은데 귀찮습니다. … ㅠ.ㅜ)
이에 반해 DocProject는 의존성 있는 어셈블리를 별도로 지정할 수 있어서 간편하고 좀 더 편리한 편집 툴도 제공해서 더 좋은 것 같아요. 하지만 C# 프로젝트 형식이라서 별도의 솔루션을 만드는 것이 좋고 해서 스탠드얼론 방식을 좋아하는 분에게는 별로겠죠.
여튼 선택은 자유…이지만 설명은 DocProject만 할께요.
헬프 파일 스타일은 헬프 파일의 디자인의 몇몇 템플릿인데요, MSDN말고도 다른 스타일로 할 수 있죠. 이건 뭐 말 그대로 옵션.
마지막으로 MS 헬프 2.0 형식의 파일(.HsX)는 CHM과는 다르게 곧바로 볼 수 없고 별도의 등록 과정을 거쳐야만 Document Explorer에서 볼 수 있죠. 근데 이게 또 만만치가 않아요. =_=;
…라고 하고 싶습니다만, 실버라이트용 프로젝트에서는 약간 더 손대야 할 부분이 있어서 그 부분만 언급하고 넘어갈께요;; 길어서 접어둡니다.
우선 테스트를 위해서 일반적인 실버라이트 프로젝트를 하나 만들어보죠. 다음과 같은 클래스 구조를 가지고 있어요.
여기에서 빼먹으면 안될 것은 문서화를 하고 싶은 프로젝트는 반드시 해당 프로젝트의 속성->Build->Output->XML documentation file을 지정해야 해요.
DocProject를 진행하기 전에 미리미리 XML 문서화를 해 놓고 빌드도 해놓는 게 좋아요. 후후후…
이 솔루션에 새 프로젝트를 추가해 보면 DocProject가 설치한 새로운 프로젝트 템플릿이 보일거에요.

새 DocProject를 생성하면 다음과 같이 마법사 형태의 빌드 엔진 옵션 선택이 나오는데요, 거의 기본값으로 해도 무방하니까 부담 없이 슥슥 넘어가세요.
여기에서 출력할 결과물을 어떤 형식으로 컴파일 할지 선택하면 돼요.
만약 Visual Studio 2008 SDK를 설치하지 않았다면 두 번째 HxS 옵션은 비활성화 돼요.
이런 공유 컨텐츠에 대한 설정도 나오는데 우리는 어디까지나 귀차니즘에 입각하여 이 작업을 하는거니까 피드백 메일 주소 정도만 수정해주면 충분히 많은 일을 한거죠.
끝으로 현재 솔루션에 등록되어 있는 프로젝트 중에서 문서화 할 프로젝트만 선택하고 Finish!! 혹시 외부의 다른 라이브러리와 함께 문서화 하고 싶다면 External Sources에서 선택이 가능해요.
자동으로 뭔가 수상한 프로젝트를 만들고 수상한 폴더와 파일들을 잔뜩 생성하는데요, 우리는 역시 이런 사항에 대해서는 눈꼽만큼도 관심이 없죠? 넘어가죠. 우리가 해줄거라곤 빌드만 하면 돼요. 어라? 그런데 에러가 떨어지네요? 바로 실버라이트의 경우 실버라이트를 위한 별도의 어셈블리를 사용하기 때문인데요. 다행하게도 DocProject는 의존성이 있는 어셈블리를 문서화 프로젝트에 참조로 추가할 수 있게 되어 있어요.
DocProject로 만든 프로젝트에서 마우스 오른쪽 클릭을 해보면 제일 아래에 DocProject Properties가 있는데요, 이걸 클릭하면 다음과 같은 속성 편집 창이 나오고 여기에서 Missing dependencies를 추가해 주면 돼요. 깜빡했는데 위쪽의 툴바를 보면 DocProject용 메뉴도 추가되어 있고요.
여기에서 Missing dependencies를 추가해 주면 되는데, 실버라이트 툴을 기본 값으로 설치했다면 다음의 두 경로를 넣으면 돼요.
- C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Libraries\Client\
- C:\Program Files\Microsoft Silverlight\2.0.31005.0\
사실 귀찮아서 위와 같이 실버라이트 라이브러리 폴더를 통째로 넣었는데요 필요한 어셈블리만 개별적으로 넣어주는게 실행 속도 향상에 큰 영향을 줘요. 저는 그냥 귀찮아서…
이 외에도 DocProject 설정에 이것저것 할게 많은데요, 핵심만 짚고 넘어가자면 Configuration 그룹에 Documentation set name 정도는 꼭 프로젝트에 맞는 이름을 넣어주세요.
자, 이제 빌드를 다시 해 보죠. 미리 경고하는데 억겁의 세월이 걸리니 걸어놓고 따땃한 차라도 한잔 하면서 웹서핑이라도 하세요. 게임은 안돼요. CPU를 거의 100% 차지하거든요. –_-;
억겁의 시간이 흘러 흘러… 만약 Help 1.x와 2.x를 함께 선택했다면 더블 억겁… 아오 지겨워…
끝나면 결과물을 프로젝트에 넣겠냐고 하는데 뭐 어차피 다시 빌드할 건데 넣을 필요 있겠어요. 그냥 아니오 선택하고요, 나중에 실제 프로덕트 레벨이 되면 예를 선택해도 되겠죠.

빌드가 끝나고 나면 다음과 같이 DocProject의 Bin 폴더에 결과물이 만들어져 있는 걸 볼 수 있어요.
chm은 친숙한 Help 1.0 스타일로 만들어진 도움말이고 곧바로 실행해서 볼 수 있죠.
반면, HxS 파일은 Document Explorer에서 보기 위해서 별도의 등록 과정을 거쳐야 해요. 이게 또 골치아프죠. 후우…이 부분은 다음에 성공하면 포스팅할께요. 몇 번 해봤는데 도무지 안되는군요.