'Microsoft.Windows.CommonLanguageRuntime, Version=2.0.50727.0' 파일을 찾을 수 없습니다.

또 태클 당했습니다.
테스트 유닛을 쓸일이 있어서 기존의 프로젝트 안에 테스트 프로젝트를 생성했습니다.
그리고 빌드...

'Microsoft.Windows.CommonLanguageRuntime, Version=2.0.50727.0' 파일을 찾을 수 없습니다

라는 에러가 뜨더군요. ( 에러 번호 : MSB3113 )
전에 쓰던 비주얼 스투디오 2005를 지우고 2008 배타를 설치하고 다시 2005를 더해 설치한 터라
CLR을 잘못 참조한 문제라 생각했죠. JDK에서 흔한 문제죠. 버전별 문제. 끌끌.

경험이 방해를 하는 경우도 있다는 것이 이런경우더군요.
당연히 닷넷 3도 설치 되어 있기에 2로 바꿀수 있는 설정을 레지스트리에서 찾았습니다.
별거 없더군요. 바꿀만한 것도 없고요. 뭐가 뭔지..

그래서 믿고 싶지 않지만 다시 MSDN에 에러 코드로 검색..
그렇습니다. 아무리 당하고 당해도 어쩔 수 없이 찾게되는 겁니다.

MS에서 강력하다고 주장(?)하는 MSDN연결 기능을 이용하여 MSDN을 보면
(즉, 에러 메지시 창에 해당 메시지를 클릭하고 F1...;;; )
이런게 나옵니다.
핵심 내용은
---------------------------------------------------------------------------------

이 오류는 새 매니페스트를 만들 때 확인할 수 없는 참조가 발견되면 발생합니다. 프로젝트 파일이나 작업 매개 변수에 문제가 있는 경우일 수 있습니다. 이 오류를 해결하려면프로젝트 파일에서 파일 참조가 충돌하는지 확인합니다. 사용자 지정 빌드 작업을 수행하는 경우 빌드 매개 변수도 확인합니다.

---------------------------------------------------------------------------------
입니다. 아우~ 너무 친절하고 해결책이라고는 전혀 제시해 주지 않는 이 친절함. 조쿤효.

그래서 구글신님께 빌었습니다. 당연 양아치 네이버는 없을태니깐요.

신님께서는 이런 문서를 내뱉어 주시더군요. 무려 MS 서포트의 문서입니다.
내용을 요약하면

[님하가 비베닷넷에서 솔루션을 만들고 두개의 프로젝트를 만들고 한 프로젝트에서 다른 프로젝트를 참조했는데 이것이 잘못 이삼. 님하의 잘못이삼.]이라고 합니다. ( 실제 내용과 다릅니다. 편견 300%입니다. )

여기서 제가 테스트를 위해 단위 테스트 프로젝트를 생성한 방법을 보자면.
1. 기존의 프로젝트를 진행하는 솔루션에 단위 테스트용 프로젝트를 생성한다.
2. 기존 프로젝트의 객체의 참조를 위해서 단위 테스트 프로젝트에서 기존 프로젝트를 참조한다.
입니다.

여기서 참조는 솔루션창에 단위 테스트 프로젝트에 보면 참조가 준비 되어 있으며 참조 추가를 들어가면 '프로젝트'탭이 있습니다. 이 '프로젝트'텝에 들어가면 같은 솔루션 내의 프로젝트가 보여서 선택하고 나오면 참조에 곱게 기존 프로젝트가 참조 되고 있는 것을 볼 수 있습니다.

함정이죠. 함정입니다. 비주얼 스투디오를 계속 사용하신 분들이라면 '왜 이렇게 해?'라고 하실지도 모르나 이클립스나 넷빈즈등을 사용하다 보면 프로젝트간의 참조는 쉽게 접하며 간단하게 해결되버리는 문제입니다. 그래서 아무 의심 않고 비주얼 스투디오에서 프로젝트 참조를 하게 되면 기존 프로젝트의 객체들도 참조도 되고 해서 잘 하다가 마지막에 뒤통수에 강력한 로우킥(!)이 들어오게 됩니다. 난감해 지죠. MS 포럼을 마구 뒤져 본것도 아니지만 간단하게 둘러보면 엄한 얘기들 뿐입니다. 뭐 기대도 안하지만요.

그래서 프로젝트를 참조하지 않으면 되겠다란 생각이 들더군요. 자바는 클래스...닷넷은 dll이 생성되므로 이 dll를 참조하면 되겠다 싶었고 기존 프로젝트의 dll를 찾았습니다. 없을까요? 있습니다. 바로 기존 프로젝트를 빌드하면 꼭 생기는 exe파일입니다. 이것도 일단은 dll이라 봐도 되니깐요.

제 나름대로의 해결책을 정리하겠습니다.
- 같은 솔루션내에 하나 이상의 프로젝트가 있는 상황에서 하나의 프로젝트는 다른 프로젝트를 참조해야한다면 다른 프로젝트만 빌드하고 나오는 메인 실행용 exe파일을 참조에 추가하면 되는겁니다. 단, 만약에 debug모드에서 실행하신다면 bin 안에 debug에 있는 exe를 참조하며, release모드라면 release의 exe를 참조해야한다는 겁니다. 그리고 기존 프로젝트에 수정이 있다면 당연히 빌드가 되어야만 수정사항이 반영 된다는 겁니다. 뭐 이 문제는 빌드 순서를 조절해 주고 솔루션 빌드를 해버리면 되는 문제죠.

ps. 정리한다면서 정신없는 정리아닌 정리가 되어 버렸습니다. 끌끌.
ps2. 프로젝트 참조는...아마도 제가 이클립스를 주로 사용하게 되어 쉽게 생각하게 된 걸지도 모른다는 생각이 들었습니다.
ps3. 저런 문제가 있으면서 왜 비주얼 스투디오는 경고 조차도 뱉어내지 않는걸까요?
ps4. 이렇게 해서 네이버 검색에서 제 블로그가 1페이지에 나오게 되는 포스트가 3개가 되는군요..쿠쿠쿠 (그럼 뭐해..많이 일어나는 문제도 아닌걸..|||OTL )

by 魔邪 | 2007/08/22 14:06 | 알고있는것들(일까나) | 트랙백 | 덧글(4)

트랙백 주소 : http://majya.egloos.com/tb/1623330
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by ash84 at 2008/04/03 17:47
덕분에 에러를 해결햇네요^^ 감사 합니다.
Commented by 魔邪 at 2008/04/03 17:48
ash84님 // 도움이 되셨다니 다행입니다.
Commented by ubuntu at 2008/06/16 14:36
저도 덕분에 문제를 쉽게 해결했습니다. 포스팅 고맙습니다.
Commented by 魔邪 at 2008/06/21 16:18
ubuntu님 // 해결 하셨다니 다행입니다. ^^ 방문해 주셔서 감사합니다.

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶