이 디렉터리는 "C:\Program Files (x86)\MSBuild\Microsoft\"를 옮겨놓은 것이다.
x64용 MSBuild로 C# 웹 애플리케이션 프로젝트를 빌드하면 "C:\Program Files (x86)\MSBuild\"가 아닌 "C:\Program Files\MSBuild\" 로 경로를 잡는데, 여기엔 "C:\Program Files\MSBuild\Microsoft\Visual Studio\" 디렉터리가 없다. 바로 아래 코드가 Webservices.csproj 에서 발견한 문제의 코드다.
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" />
여기서 $(MSBuildExtensionsPath)의 값이 원인이다. 만약 빌드 스크립트를 실행한 게 32비트 MSBuild라면 이 값은 "C:\Program Files (x86)\MSBuild\"이 된다. 물론 비주얼 스튜디오는 "C:\Program Files (x86)"에 설치되므로 "C:\Program Files (x86)\MSBuild\Microsoft\Visual Studio\"를 잘 찾는다.
반면 64비트 MSBuild라면 $(MSBuildExtensionsPath)의 값이 "C:\Program Files\MSBuild\"가 된다. 최종적으로 "C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" 파일을 찾으려 든다. 하지만 이 파일은 존재하지 않기 때문에 웹 애플리케이션 프로젝트를 MSBuild로 빌드하려면 오류가 난다.
나는 이 문제를 간단히 해결했다. "Microsoft.WebApplication.targets" 파일을 SVN 저장소에 올려놓고 웹 애플리케이션 프로젝트 파일(.csproj)를 수정했다. 이렇게 개발자가 직접 수정한 프로젝트 파일을 Visual Studio 2008에서 처음 읽을 때 경고 창이 뜬다. 누군가 프로젝트 파일을 손봤으니 이 파일을 읽기 전용으로 적재할 건지 묻는다. 물론 나름 아닌 내 자신이 손 봤으니 보안 경고는 무시했다.
<Import Project="$(SomewhereIPutThisFile)Microsoft.WebApplication.targets" />