헬마입니다.

  이제 마지막 글입니다. 총 3개의 글로 올라갈 것 같네요. 워낙 타자 속도가 느리니 이정도 글 번역하는데 며칠이 걸리는지 모르겠네요.

원문 글 링크 : http://blogs.msdn.com/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx


VS2010 에서 변환작업에 대해 알려진 문제점

VS2010 에서 변환작업에 대해 알려진 문제점이 몇가지 있습니다 :

    1. 대상 프레임워크 버전
        변환 후에 관리되는 C++ 프로젝트는 기본값으로 4.0 프레임워크를 대상으로 합니다. 이러한 동작의 숨겨진 이유는 VS2010 컴파일러는 프레임워크 2.0, 3.0, 3.5를 대상으로 할 수 없기때문입니다. VS2008 컴파일러는 반드시 2.0, 3.0 또는 3.5 를 대상으로 해야합니다. 변환된 C++ 어플리케이션이 빌드되도록 하기위해 우리는 TargetFrameworkVersion 을 C++ 어플리케이션에 대해서 4.0 을 기본값으로 변경했습니다. C++ 어플리케이션은 아래의 방법들 중 하나를 사용하여 다른 프레임워크 (예: 3.5 ) 를 대상으로 할 수 있습니다 .
        - vcxproj 파일을 편집하고 첫번째 속성 그룹에서 아래와 같은 줄을 추가로 선언합니다 :
            <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>       
        - VS2010 명령행을 열어 set TargetFrameworkVersion=3.5 를 실행 후 start devenv.exe 를 통해 IDE 를 실행합니다. 이렇게 하면 여러분의 모든 C++ 어플리케이션의 v3.5 프레임워크를 대상으로 합니다.
        - 어플리케이션을 빌드할 때 MSBuild 에 /p:TargetFrameworkVersion=v3.5 를 넘깁니다 : MSBuild my.vcxproj /p:TargetFrameworkVersion=v3.5

        알림 : 어플리케이션이 2.0, 3.0, 3.5 를 대상으로 하려면 컴퓨터에 VS2008 이 설치되어 있어야합니다.
        C#/VB 어플리케이션의 경우에는 변환 후에도 대상되는 프레임워크가 설치되어있다면 대상 프레임워크를 변경하지 않습니다. 만약 대상이 되는 프레임워크가 설치되어있지 않다면, 여러분은 요구되는 프레임워크를 내려받거나 대상 프레임워크를 4.0으로 하는 것중 선택할 수 있습니다.

        - 만약 여러분의 솔루션에 C#/VB/관리되는 C++ 프로젝트가 섞여있다면, 여러분은 C#/VB 어플리케이션과 관리되는 C++ 어플리케이션이 서로 다른 프레임워크를 대상으로 삼고 있는 현상을 겪을 수 있습니다. 만약 참조된 프로젝트가 참조하는 프로젝트의 프레임워크 버전보다 더 높은 프레임워크 버전을 가지고 있다면 MSB3258 경고를 겪을 수 있습니다.
        -
        - 또는 C4691 과 같은 경고를 겪을 수 있습니다 : type referenced was expected in the unreferenced assembly ‘file’, type defined in current translation unit used instead, if the Framework version of the referencing project is higher.

        - 여러분 솔루션의 모든 프로젝트를 같은 프레임워크 버전으로 대상을 다시 지정해야합니다.

    2. makefile "Output" 디렉토리에서 사용되는 따옴표
        만약 "Output" 속성에 따옴표가 사용된 makefile 프로젝트를 가지고 있다면, 변환이 실패합니다. 이 문제를 해결하려면 변환을 하기전에 "Output" 속성에서 따옴표를 제거하면 됩니다.

    3. $(IntDir) 과 $(OutDir) 에서 역슬래시
        $(IntDir) 과 $(OutDir) 은 속성 페이지에서 "General -> Intermediate Directories" 와 "General -> Output Directories" 를 통해 확인할 수 있습니다. $(IntDir) 과 $(OutDir) 의 서식을 맞추기위해 이 값들을 변환할 때 어느 하나가 "\" 를 가지고 있지 않다면 의도적으로 "\" 를 추가합니다. 마지막에 "/" 가 있다면 제거됩니다.

        그러나, 이러한 작업은 $(IntDir) 또는 $(OutDir) 이 makefile 또는 Exec 작업이 사용된 사용자 빌드에서 사용되는 빌드 시나리오를 망가뜨릴 수 있습니다.

        makefile 의 경우에 nmake 도구는 끝문자가 "\" 인 값을 평가하지 못합니다. 예를 들어, 아래와 같은 명령입니다.

BuildCommandLine="nmake /nologo &quot;OUT=$(OutDir)&quot; &quot;OBJ=$(IntDir)&quot;"

        왜냐하면, $(OutDir) 과 $(IntDir) 은 마지막 "\" 문자를 가졌고 nmake 도구는 이것들을 적절히 확장하지 못하고 OUT 과 OBJ 는 결과적으로 빈문자열로 평가받습니다. 이러한 문제를 고치려면 속성페이지에서 $(IntDir) 과 $(OutDir) 에 대해서 "\" 를 제거해야합니다.

        $(OutDir) 또는 $(IntDir) 를 사용자 빌드 -빌드 이벤트, 사용자 빌드 도구, 사용자 빌드 단계를 포함하여 - 에 넘겼다면 도구들에 의해 "\" 문자가 탈출문자로 취급될수도 있다는 점으로 인해 빌드 실패를 겪을 수 있습니다. 예를 들어, 아래와 같은 사전빌드 이벤트를 가지고 있다고 해보죠. 

        명령행은 다음과 같이 될겁니다 : cl /c /Fo"Debug\\" "C:\foo\win32.cpp" 대신 cl /c /Fo"Debug\" "C:\foo\win32.cpp" 로 말입니다.
        이러한 문제점을 수정하려면, 탈출문자를 완성하기 위해 /Fo 에 넘겼던 값( C/C++ -> Output Files -> Object File Name ) 에 "\" 문자를 추가합니다.

    4. 솔루션 탐색기 UI
        VS2010 에서 솔루션 탐색기에서 폴더와 파일의 표시는 .vcxproj.filters 파일에 의해 제어됩니다. 다른 범위하에서 같은 이름을 가진 폴더들이 있다면, 예를 들어, "Native\Include" 와 "Include" 라면, 두번째 "Include" 와 "Include" 하위의 파일들은 변환후에 솔루션 탐색기에 나타나지 않습니다. 이 문제를 우회하려면, 솔루션 탐색기에서 폴더를 재생성하고 이 폴더에 관련 파일들을 추가합니다.

    5. 읽기 전용 프로젝트 파일 또는 디렉토리
        읽기 전용 디렉토리에서 업그레이드를 하거나 이전에 변환했떤 프로젝트 파일이 읽기전용일 때 재변환하면 문제를 겪을 수 있습니다. 파일들과 디렉토리들을 쓰기가능한지 확인하지 않으면, 통합된 소스 제어 시스템과 마찬가지로 자동으로 체크아웃될 수 있습니다.

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

댓글을 달아 주세요

헬마입니다.

  그제쯤인 것 같은데, VC++ Team Blog 를 보다보니 이전 버전의 Visual Studio 에서 VS2010 으로 프로젝트를 업그레이드 할 때 주의사항이라든가 절차등에 관한 꽤나 긴 글이 올라왔더군요. 찬찬히 읽어보다 번역을 해놓으면 차후에 살펴볼 때 편하겠다 싶어서 번역을 해봤습니다. 원문은 단 한번의 포스트인데 장문의 글로인해 짬짬이 번역하는데 시간이 오래걸려서 몇개의 부분으로 나누어서 올리도록 하겠습니다. ^^

원문 글 링크 : http://blogs.msdn.com/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx



  안녕하세요. 제 이름은 Li Shao 입니다. 저는 C++ 팀의 Test 분야의 Software Design Engineer 를 맡고있습니다. 이전의 수많은 블로그들 - Felix Huang 의 블로그, Andreea Issac 의 블로그, 저의 이전 블로그 -에서 언급되었던 바와 같이 이번 배포버전의 주 개선점 가운데 하나는 C++ 빌드 시스템이 VCBuild 기반에서 MSBuild 기반 빌드 시스템으로 이전되는 것입니다. C++ 프로젝트 시스템은 또한 MSBuild 빌드 시스템의 상단에서 제작되었습니다. 이러한 일들은 수 많은 변화를 만들었습니다. 우리의 목표는 최종 사용자 관점에서 가능한 업그레이드 작업을 부드럽게 할 수 있도록 하는 것입니다.

업그레이드 절차

    VS2010 은 VC6, VS2002, VS2003, VS2005, VS2008 로부터 업그레이드를 지원합니다. 이전 버전의 Visual Studio 에서와 마찬가지로 업그레이드는 IDE 의 변환 마법사를 통하거나 명령행 ( devenv /upgrade ) 을 통해서 할 수 있습니다.

    여기에 여러분의 어플리케이션을 업그레이드하기 위해 권장하는 절차가 있습니다 :

        1. 빌드 환경과 같이 업그레이드 환경을 설정합니다.
            업그레이드 작업은 업그레이드하는 동안 파일을 불러들이고 값을 평가합니다. 만약 여러분의 프로젝트가 프로젝트 파일에 의해 선언되지 않은 값들을 사용한다면, 예를 들어, 환경 변수에 의해 설정되는 값들, 업그레이드를 하기 전에 환경변수를 설정해야 합니다. 이러한 환경 변수를 적절히 설정하지 않으면, 평가되지 않은 값에 의해 변환 오류 또는 경고를 얻을 수 있습니다.

        2. 업그레이드를 하기 전에 필수 플랫폼이 설치되었는지 확인하세요.
            프로젝트에 대해 이용가능한 모든 플랫폼이 없는 컴퓨터에서 프로젝트를 변환하면 변환오류를 일으킬 수 있습니다. 예를 들어, 여러분이 Itanium 플랫폼을 지원하지 않는 Visual Studio Professional SKU 에서 Itanium 플랫폼 프로젝트를 변환하려하면 아래와 같은 변환 오류 창을 보게 될 것입니다.

Failed to upgrade 'Debug|<Itanium>'. Please make sure you have the corresponding platform installed under '%vctargetspath%\platforms\Itanium'. Cannot load the project due to a corrupt project file. The following error has occurred during XML parsing:
File: D:\Sample\ConsoleApp\ConsoleApp.vcproj
Line: 28
Column: 5
Error Message:
System error: -2147154677.
The file 'D:\Sample\ConsoleApp\ConsoleApp.vcproj' has failed to load.

            이러한 오류는 설계상 의도된 사항으로 왜냐하면, 변환 작업은 변환을 성공시키기 위해 빠진 플랫폼들 안에서 속성을 평가해야하기 때문입니다. 여러분은 다음과 같은 디렉토리들을 살펴봄으로써 컴퓨터에 설치된 플랫폼들을 확인할 수 있습니다: %ProgramFiles%\MSBuild\Microsoft.cpp\V4.0\Platforms (or %ProgramFiles(x86)%\MSBuild\Microsoft.cpp\V4.0\Platforms on x64 machine)

        3. 가능하다면 먼저 VS2008 툴셋을 사용해서 빌드할 수 있도록 직접적인 다중-대상(Multi-Targeting) 기능을 사용하세요.

            VS 2010 에서 새로운 MSBuild 기반 프로젝트 시스템을 사용해서 VS2010 IDE 내부에서 Visual Studio 2008 툴셋을 사용해서 빌드할 수 있도록 해주는 다중-대상 기능을 추가했습니다. 우리는 고객들에게 이러한 기능을 추천하며, 특히 대단위의 코드양을 가진 고객들이 최초 업그레이드를 할 때 VS2008 툴셋을 사용해서 빌드하기위해 VS2010 을 사용함으로써 이 기능을 이용할 수 있습니다. 이 기능은 업그레이드 후에 겪을 수 있는 도구 문제로부터 어떠한 프로젝트 시스템/빌드 시스템 관련된 문제를 분리할 수 있도록 합니다. 이러한 일들은 VS2010 툴셋으로 좀 더 부드럽게 이동할 수 있도록 합니다.

    업그레이드를 할 때, 등록정보 시트 파일(.vsprops) 들은 새로운 형식(.props) 로 변환됩니다. 마찬가지로 프로젝트 파일(.vcproj) 들은 새로운 형식인 (.vcxproj) 로 변환됩니다. 알림 : 새로운 프로젝트 파일들은 과거의 프로젝트 파일들과 같은 곳에 생성됩니다. 새로운 파일 형식(.filter.vcxproj) 또한 변환 중에 생성됩니다. 필터 파일들은 솔루션 탐색기에서 폴더들은 표시하는데 사용된 정보들을 담고 있습니다. 이러한 필터 정보들은 원래 프로젝트 파일의 일부분이었습니다. MSBuild 는 프로젝트 파일이 변경될 때 마다 재빌드를 요구하기 때문에 이러한 변경이 필요했습니다. 필터 정보를 분리된 파일에 저장함으로써 전체 프로젝트를 재빌드하게 하지 않고 필터들이 변경될 수 있게 되었습니다. 
        
            알림 : 업그레이드 작업은 .user 파일은 변환하지 않을 것입니다. 그 결과로, 여러분의 디버깅과 배포 설정은 변환 후에 보존되지 않습니다.

    VS2010 에서 새로운 명령행 업그레이드 도구인 VCUpgrade.exe 가 소개되었습니다. 이 명령행 도구는 오직 하나의 프로젝트로된 어플리케이션 업그레이드에 적합하기 때문에 솔루션 파일을 입력으로 받아서 정보를 분석해서 프로젝트 파일들을 취할 수 없습니다. VCUpgrade.exe 는 $(VSInstallDir)\common7\Tools 디렉토리에 위치하고 있습니다. 이 도구는 Visual Studio IDE 없이 WinSDK 에 포함된 프로젝트 파일들의 명령행 업그레이드를 위해 WinSDK 의 다음 배포판에 포함될 예정입니다.

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

댓글을 달아 주세요

헬마입니다.

어제 날짜로 드디어 MSDN 에 비주얼 스튜디오 2010 RC버전이 올라왔습니다.

버그와 성능이 대폭 개선된 것으로 알려져있는데요.

이번 버전은 아직 웹 인스톨 버전이 올라오지 않았네요.

내려받아서 설치하는 대로 설치화면이나 설치파일등을 올려보겠습니다. ^^


C++0x 지원에 있어서 베타2보다 나아진점이 있는지, 도움말 시스템이 좀 더 안정화되었는지 여러가지 관심가는 점이 많이 있네요.


P.s

오전에 내려받기 걸어놓은 것이 오후 7시인 이제야 내려받기 완료네요.. 흑흑...

설치는 집에가서 해봐야겠습니다. ㅠㅠ

도저히 내려받기 속도가 너무 느려서 토렌토로 하나 만들어봤습니다.

다들 많이 붙어주세요.

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

댓글을 달아 주세요

  1. 로레 2010.02.09 21:33 신고 Address Modify/Delete Reply

    저도 붙어 있는데 소스가 너무 적네요 속도도 드리고 기다렸다 내일 받아야 할듯 하네요.
    모든 유저에게는 내일 받을수 있다네요

  2. 천풍 2010.02.10 09:25 신고 Address Modify/Delete Reply

    음 많이 느리네요..언넝 써보고 싶은데 ㅜ_ㅜ

  3. 달포 2010.02.11 02:43 신고 Address Modify/Delete Reply

    12일날 한글판이 나오는다는게 정말인가요?
    RC면 언어지원도 될듯한데 기다릴지.. 그냥 영문으로 설치할지.. 고민되네요..

티스토리 툴바