최악의 궁합 - C++/CLI, x64, MSBuild

  • Post Author:
  • Post Category:
  • Post Comments:1 Comment
  • Post last modified:June 12, 2008

C++/CLI 프로젝트를 도입한 이래로 괴상한 문제에 시달리게 됐다. 특히 멀쩡한 줄 알았던 빌드가 실제론 엄청난 오류에 시달리고 있다는 사실을 뒤늦게 깨닫는 바람에 문제의 원인을 파악해서 고치는 데 시간이 꽤 걸렸다. 빌드 서버를 잘못 설정하는 바람에 빌드가 깨졌는데도, ‘잘 되고 있으니 걱정말라’는 메시지를 전달받고 있었던 탓이다.

끝까지 속을 태웠던 문제는 유독 x64 빌드 때에만 발생했다.

WIN32 빌드 때는 전혀 발생하지 않는 문제이고, x64 빌드일지라도 Visual Studio를 통해 빌드하면 마찬가지로 문제가 없다. 하지만 64비트 MSBuild 바이너리를 통해 비주얼 스튜디오 솔루션 파일(.sln)을 빌드하려 하면 저런 오류가 나온다.

왜 이런 차이가 발생하는지는 알 수 없다. 단지 MSBuild의 버그가 아닐까 추측해볼 뿐이다. 그렇다고 문제를 방치할 수도 없어 별 수 없이 오류 메시지를 보고 해결책을 모색해봤다.

결국 문제를 해결했는데, 방법은 아주 간단하다. 해당 C++/CLI 프로젝트에서 System.dll에 대한 참조를 없애면 그만이다. 이 문제는 각 프로젝트의 참조가 다음과 같이 구성되어 있을 때 발생한다.

CommonLibrary : C# 프로젝트
	- System.dll
MyApp : C++/CLI 프로젝트
	- System.dll
	- CommonLibrary.dll

대시(-) 옆에 붙은 파일은 해당 프로젝트가 참조하는 어셈블리를 말한다.

MyApp가 C# 프로젝트였다면 이런 구성이 올바를 뿐더러, System.dll 참조를 뺀다면 되려 컴파일 자체가 안 될지도 모른다. C++/CLI 프로젝트라도 비주얼 스튜디오로 빌드하면 이런 구성이 맞다. 하지만 MSBuild로 MyApp 프로젝트를 빌드하려면 System.dll에 대한 참조는 빼야한다. MyApp가 참조하는 CommonLibrary.dll이 이미 System.dll을 참고했기 때문이다. 다행스럽게도 System.dll을 참조 목록에서 빼더라도 비주얼 스튜디오는 아무런 불평도 하지 않는다. 이렇게 하면 비주얼 스튜디오와 MSBuild 모두가 만족한다.

Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
follow me
  • RT @not_unot_u: 네 번째 올리신 청원글이에요. 너무 고생하고 계시는데 동의 한 번 씩 부탁드립니다. 거의 다 왔습니다! 7월 11일 마감인데 이제 2만명만 채우면 청와대 답변 받을 수 있어요. https://t.co/3mVDM3jsrP
    1 day ago
  • 그런데 전화를 받은 윤석열 검찰총장이 박 장관에게 ‘(조국 후보자가) 이제 그만 물러나라는 뜻으로 제가 (압수수색을) 지시했습니다’ 이렇게 말했다는 거지. 윤석열을 대통령으로 뽑은 기억은 없는데 희안하구만 https://t.co/yEEQXfey4g
    2 days ago
  • 훌륭한 시스템을 체험하지 못한 사람이 시스템의 부재로 야기되는 문제를 인식할 수 있을까? “난 잘하고 있는데 왜 너는 자꾸 불평하느냐?”라고 생각하지 않을까?
    2 days ago
Buy me a coffeeBuy me a coffee
×
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
Latest Posts