Visual Studio 빌드 후 이벤트 기능 확장하기

최근 진행 중인 한국씨티은행 내 프로젝트에서 개인적으로 Visual Studio의 기본 기능들에 대해 많은 것을 다시 보게 되었습니다. 그 중에서도, 가장 뜻깊은 발견을 하나 한 것이 있는데, 환경 변수에 관한 내용이었습니다.


 


Visual Studio의 빌드 후 이벤트에서는 DOS 명령어를 사용하여 빌드 전이나 빌드 후의 이벤트를 사용자 정의하는 것이 가능하여 Visual Studio가 기본으로 제공하지 않는 기능들 (예: Sandcastle을 통한 코드 문서화)을 한 번에 완성할 수 있도록 할 수 있습니다. 더 나아가서는, 프로젝트 자체에 별다른 컴파일 대상 없이 빌드 순서에 따라 빌드 전 / 빌드 후 이벤트에 대한 스크립트만을 포함하는 프로젝트도 구성할 수 있을 것입니다.


 


그러나, 빌드 전 / 빌드 후 이벤트에는 한 가지 크게 아쉬움이 남는 부분이 있는데, 바로 명령줄 인터프리터의 환경 변수를 사용하는데 제약이 있다는 점입니다. (예를 들어 %WINDIR% 같은 변수가 되겠습니다.) 프로세스 수준, 로컬 사용자 수준, 시스템 수준 등 환경 변수로 사용할 수 있는 내용들이 많음에도 불구하고 이런 혜택을 누리지 못한다는 것은 많이 아쉬운 부분이었고, 제가 진행중인 프로젝트에 있어서는 곤란한 부분이었습니다. 그러던 중, 좋은 방법을 하나 찾게 되어 소개합니다.


 


빌드 후 이벤트 기능을 확장하려는 프로젝트에 대해서, 솔루션 탐색기에 해당 프로젝트에 일반 텍스트 파일을 하나 추가합니다. 그리고, 여기에 명령줄 인터프리터의 명령을 작성하고 저장한 뒤, 파일의 이름에서 확장자 부분을 .txt 대신 .cmd로 변경합니다.


 



 


변경 후에는 해당 항목의 속성으로 이동하여, “Copy to Output Directory” (한국어 명칭의 경우 출력 디렉터리로 복사) 항목을 True로 설정하여 빌드 도중에 명령줄 인터프리터 스크립트 파일이 빌드 대상 디렉터리에 복사될 수 있도록 합니다.


 



 


마지막으로, 프로젝트 속성에서, 빌드 후 이벤트 스크립트에 다음과 같이 지정하면, Visual Studio가 아닌 Windows의 명령줄 인터프리터 기준으로 수행되는 빌드 후 이벤트 처리 시스템을 완성할 수 있습니다.


 



 


$(TargetDir)은 MSBUILD에서 제공하는 환경 변수로, ” (Back Slash) 기호가 값 내에 가장 끝에 붙어있어서 경로 구분 기호 없이 이어서 파일의 이름을 서술한다는 점을 유의하여, call 명령을 우리가 만든 CMD 파일을 가리키도록 호출한 것입니다.


 


만약 MSBUILD의 환경 변수를 CMD 파일 내에서 사용하기를 원할 경우, set 명령을 사용하여 변수를 공유하거나, 매개 변수를 전달하면 CMD 파일 내에서는 %0 ~ %9 까지의 예약 변수를 사용하여 MSBUILD의 환경 변수 값을 수신할 수 있습니다.


 

댓글 남기기