진행중인 프로젝트 Visual Studio 2010 -> Visual Studio 2013으로 이전

C#이랑 WEB프로젝트만 vs2013을 쓰고 C++프로젝트는 vs2010을 쓰고 있었는데 큰맘먹고 싹 vs2013으로 이전했다.

OK버튼만 클릭하면 완전 클리하게 될 줄 알았는데 그건 희망사항이고 완전 클린하게 이전은 안된다.

대체로 클릭만으로 끝나지만 asm코드가 섞여있거나 문자 체계가 MBCS인데 MFC 프로젝트라던가, DirectX를 사용했거나 하면 문제가 조금씩 생긴다.

컴파일 해보면 deprecated 경고를 적지 않게 보게 되는데 이게 후달리게 되는 주요 요소중 하나..

PC용 온라인 서비스하는 회사들은 MFC많이 쓸거고 그 중 상당수는 꽤나 레거시 코드로 UNICODE기반이 아닐 것이다. 일단 MFC에서 MBCS지원 안한다는 메시지가 충격과 공포. UNICODE로 바꾸라고 나오는데 VS2013용 MBCS익스텐션 깔면 일단 빌드는 할 수 있다.

GetVersionEx()같은 함수들이 deprecated 되었다고 나옴. 나도 이런 함수 쓰고 싶지 않았는데 XP랑 호환성 땜에 사용했던거다. XP를 날려버리고자 하는 MS의 의지를 읽을 수 있다. 지원 중단안 OS의 API는 이후 컴파일러에서도 사용 못하게 하겠다는…

그 외에 DX SDK랑 충돌하는 문제가 있다.

Windows SDK 8.1에 포함된 DXSDK는 D3DX를 사용하지 않기 때문에 오픈소스로 제공되는 DirectXTex를 사용하던지 기존 SDK에서 D3DX를 꺼내와야됨. DirectXTex는 무척 추천할만한 라이브러리지만 멀쩡히 잘 돌던 프로젝트에서 D3DX를 걷어내고 DirectXTex로 교체한다는게 어떤 의미인지 온라인 게임 유지해본 사람들이라면 잘 알겠지.

어쨌건 간단한 일은 아니다.

컴파일은 되더라도 Windows SDK 8.1과 DXSDK(june 2010)의 헤더파일이 충돌해서 수많은 warning을 보게 된다. 어찌어찌 하면 피해갈 수 있는데 프로젝트중 한 개는 아직 warniing을 제거하지 못했다.

ML64로 어셈블하던 ASM파일이 어셈블에 실패하기도 하고. 크게 두 가지 문제가 있었는데 PROC,ENDP조합으로 함수를 만들었을때 사용하지 않는 인자가 있으면 에러로 처리한다. vs2010의 ML64에선 잘 넘어갔었다.

그리고 asm파일이 프로젝트 바깥의 다른 폴더에 존재하는 경우도 어셈블 실패.

상황이 전혀 다르지만 두 경우 모두 asm파일의 프로퍼티에서 Warning Level을 3에서 2로 조정하면 어셈블 된다.

우여곡절 끝에 일단 이전은 완료했는데 무사히 잘 돌아가는지 100% 확신은 못하겠다.

서비스 한달도 안남았는데 이거 잘 하는 짓인건지.

더 늦기전에 해야겠다는 생각 땜에 저지르긴 했는데 자살행위 아닌가 모르겠다.


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중