윈도우 서버 2008 OS에 델파이/C++빌더의 최근 버전들(2010~XE5)을 설치한 경우, 기본 상태에서는 컴파일하려고 할 때 컴파일러 에러가 뜨면서 컴파일이 되지 않습니다. 정확한 에러 메시지는 다음과 같습니다.
1 |
"Could not load file or assembly Microsoft.Build.Framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a or one of its dependencies. 파일을 찾을 수 없습니다." |
이 에러가 발생하는 원인은, 델파이/C++빌더(이하 RAD Studio)의 최근 버전들이 컴파일에 이용하는 빌드엔진인 MSBuild가 없어서입니다. MSBuild는 .NET 프레임워크에 포함되어 있기 때문에, 따라서 필요한 버전의 .NET 프레임워크가 설치되어 있지 않은 경우라면 위와 같은 에러가 발생합니다. 컴파일의 전체 진행을 MSBuild에 의존하는데 필요한 MSBuild가 설치되어 있지 않으니 당연히 에러가 발생하겠죠.
이 MSBuild는 RAD Studio 2007 버전에서 처음 도입되었는데요. 그래서 델파이2005와 BDS2006 버전에서 프로젝트 파일의 확장자가 bdsproj였던 것이 2007 버전 이후로 dropj(델파이), cbproj(C++빌더)로 변경된 것입니다. RAD Studio 2007과 2009 버전에서는 .NET 프레임워크 2.0 버전의 MSBuild를 이용했었고, RAD Studio 2010 버전부터 XE, XE2, XE3, XE4를 비롯 가장 최신 버전인 XE5까지 .NET 프레임워크 2.0 버전의 MSBuild를 이용합니다. 만약 시스템에 해당 버전의 .NET 프레임워크가 설치되어 있지 않을 경우 RAD Studio 인스톨러 프로그램이 먼저 설치를 하고 진행을 하기 때문에, RAD Studio를 설치하는 과정에서 일반적으로는 별 신경을 쓸 필요가 없습니다.
그런데 문제는, 윈도우 서버 2008이 디폴트 상태에서는 .NET 3.5 프레임워크의 설치를 허용하지 않는다는 것입니다. RAD Studio를 설치하는 과정에서 인스톨러가 .NET 3.5 프레임워크가 설치되어 있지 않은 것을 발견하고 자체적으로 포함하고 있는 .NET 3.5 프레임워크 설치 프로그램을 실행시키지만, 윈도우 서버 2008 OS가 설치를 거부하고 다음과 같은 에러 메시지를 뱉습니다.
이 메시지가 이해하기 쉽거나 의미를 이해하고 있다면 문제가 되지 않을텐데, 불행히도 우리는 .NET 개발툴을 설치하는 것이 아니라 네이티브 개발툴인 RAD Studio를 설치하는 것이기 때문에 .NET 어쩌구 하는 에러메시지가 뭘 뜻하는지, 어떤 문제가 생길지 모르는 경우가 대부분이죠. 이 메시지는 .NET 프레임워크 3.5 설치가 실패했다는 건데, 실패했다고 명확히 말해주지 않을 뿐더러, RAD Studio 인스톨러는 제대로 설치되었는지 확인도 하지 않고 그냥 그대로 RAD Studio 메인 설치를 진행해버립니다. 제대로 설치되지 않았으니 인스톨러를 종료하는 것이 적절한데 말이지요. 설치 후에 IDE도 잘 실행되고 별 문제가 없어 보이는데, 새 프로젝트를 만들거나 기존 프로젝트를 불러올 때, 혹은 컴파일을 시도할 때 위에서 언급했던 “Could not load file or assembly Microsoft.Build.Framework…” 에러를 던지고는 나몰라라 해버립니다. 그래서 아무래도 이건, RAD Studio의 완성도의 문제라고 판단됩니다.
어쨌든 이 문제를 해결하려면, 윈도우 2008 서버 자체의 설정으로 해결해야 합니다. 사실 윈도우 2008 OS가 자체적으로 .NET 프레임워크 3.5 버전을 포함하고 있는데, 기본적으로 단지 설치만 되어 있지 않은 상태입니다. (사용자가 직접 설치하려고 하는 것까지 막는 이유는 납득이 안되네요. -.-)
.NET 프레임워크 3.5를 설치하려면, 윈도우 서버 2008의 “서버 관리자”를 실행시키고(“관리 도구” 그룹에 있음), 왼쪽 트리뷰에서 “기능”을 선택합니다. 그리고 “기능추가”를 클릭하고 가장 위의 항목인 “.NET Framework 3.5.1 기능”을 체크하고 다음으로 넘어가면 됩니다.
(보시다시피, 엠바카데로 뿐만 아니라 MS도 엉터리죠. 위 에러 메시지의 내용이 틀렸습니다. “역할 관리 도구”를 사용해서 설치해야 한다고 써있는데, 실제로는 “역할”이 아닌 “기능”에서 선택해야 합니다. 덕분에 더 헤맸습니다. -.-;;)
이 문제는 윈도우 서버 2008과 윈도우 서버 2008 R2에서만 발생하는 것 같습니다. MS의 문서를 보니 윈도우 서버 2012에서는 .NET 프레임워크 3.5 버전 설치를 막는 문제는 없는 것으로 보이네요. (http://msdn.microsoft.com/ko-kr/library/bb822049(v=vs.110).aspx)