본문 바로가기

기술자료/OS

빌드 이벤트 9009가 발생하는 경우

이 팁은 Visual Studio 2005에 관한 팁입니다.

문제 유형
C#을 이용해 독립적인 클래스를 하나의 DLL로 만들어 GAC에 등록하는 경우가 종종있습니다.특히 서버용 구성요소를 만들다 보면 자주 이런 식으로 구현하게 되는데,이 경우 자동으로 Gac에 등록되게 할 수 있도록 프로젝틔 속성 내에 있는 빌드 이벤트를 이용하곤 합니다.
빌드 이벤트 내에 아래와 같은 형태로 넣을 수 있습니다.


빌드 전 이벤트 명령줄(R)
gacutil.exe /u $(ProjectName)

빌드 후 이벤트 명령줄(O)
gacutil.exe /i $(TargetFileName)


해당 항목에 위의 굵은 줄 부분을 넣게 되면, 자동적으로 빌드 하기 전에 GAC에
등록되어 있는 어셈블리를 해제 했다가, 빌드가 완료된 후 다시 GAC 상에 등록 해주게 됩니다. 일반적으로 간단한 DLL에서는 위와 같이 작업하게되면 큰 문제없이 컴파일 되며
정상적으로 동작합니다.

그러나 팀 작업이나 기타 다른 이가 작성한 프로젝트를 가져와 작업하는 경우
위의 설정에서 오류가 발생할 수 있습니다.
저 같은 경우에는 아래와 같은 오류 메시지가 뜹니다.(XXX.XXXX.XXXXX는 어셈블리
이름입니다.)

오류    1   "gacutil.exe /u XXX.XXXX.XXXXXX"
명령이 9009 코드에서 끝났습니다.

문제 원인 분석
오류에서 나타내고 있는 9009 코드라는 것에 대한 정확한 의미를 찾을 수 없습니다.
일단 각종 포럼에서 제시한 문건들을 보면 Gacutil.exe 뿐만 아니라, 다양한 명령줄
실행 중에 발생한다는 것을 쉽게 발견하실 수 있습니다. 그래서 여기서는 Gacutil.exe
만을 가지고 판단하도록 하겠습니다
제가 gacutil.exe를 버전 별로 실행해본 결과,
위와 같은 오류가 발생되는 원인이 1.1.4X 버전의 .NET Framework 내에
있는 Gacutil.exe가 불려져서 발생되는 경우가 가장 많습니다.(최소한 저와 같은
환경에서는 그렇습니다.) 왜 그런지는 알 수 없지만 VS 2005의 빌드 이벤트 명령줄은
Gacutil.exe를 2.0 용이 아닌 1.0 버전용을 먼저 호출 되고 있다고 판단됩니다.

해결 방법
1. 전체 경로로 바꾸어 처리하기.
이 경우 외국 사이트 등을 방문하여 해당 문건에 대해 처리하는 방법에 대한 각종
질의 답변 글을 보면 다음과 같은 방법으로 해결하라고 적혀 있습니다.

gacutil.exe /u $(ProjectName)
->
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe"
/u $(ProjectName)

즉 실행하려면 파일에 대한 전체 경로와 파일명을 넣어주고 처리해주면 된다는
것입니다.실제로 저 같은 경우에도 프로젝트의 속성에 들어가 빌드 이벤트 항목의 두 문장을
위와 같이 수정했으며 정상적으로 컴파일 되는 것을 확인했습니다.

2. 검색 경로에 포함시키기.
그러나 프로젝트 파일에 대한 수정권한이 없는 경우가 있습니다. 특히 팀 프로젝트를
하게 되는 경우 이 프로젝트 파일을 수정할 수 없습니다. 수정하지 않고 위의 방법을 적용하는 마땅한 방법이 없습니다.
그러나 %PATH% 경로의 내용에 위의 BIN 폴더의 경로를 넣으면 해결됩니다.
방법은 아래와 같습니다.

- 내 컴퓨터 -> 속성 -> 고급 -> 환경 변수에 들어가 각종 환경
변수 설정 창을 띄웁니다.
- 시스템 변수 쪽에서 Path 라는 항목을 더블 클릭해서 편집 창을 띄웁니다.
- 각종 경로들 중 windows 시스템 폴더들을 가르키는 부분 뒤쪽에 넣습니다.
   (위치는 크게 관계 없지만, 가급적 앞쪽으로 배치하는 것이 좋습니다.
     저 같은 경우 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;
뒤에 놓았습니다. )  

- Visual Studio 2005를 다시 시작합니다.

경로를 변경해 본 결과 큰 문제없이 컴파일이 되며 정상적으로 gacutil.exe가
실행된 것을 확인할 수 있었습니다.

마무리
해결방법이라고 두가지를 제시해 드렸지만, 소 뒷걸음 치다 쥐잡은 것과 같은
결과 입니다. 일단 컴파일 중 오류로 나타낸 코드 9009 의 정체는 아직 찾지 못했읍니다
왜 갑자기 v1.0용 Gacutil.exe를 실행하는 것인지는 모르겠지만,
아마 다른 서버 제품이 설치되어 있어 발생되는 것인지도 모르겠습니다.
(현재 제 개발용 PC내에는 SQL 2005와 SPS 2007이 설치되어 있습니다.)
나중에 더 많은 내용을 알게 되면 추가해서 적어보도록 하겠습니다.