S#03 김용현:VS2010으로 마이그레이션

3,935 views

Published on

마이크로소프트웨어 C++ 사용자를 위한 VS2010 세미나
세번째:VS2010으로 마이그레이션

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,935
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
8
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

S#03 김용현:VS2010으로 마이그레이션

  1. 1. VISUAL STUDIO 2010 으로의 마이그레이션 김용현 DRVOSS@GMAIL.COM WWW.YHKIM.COM MICROSOFT MVP 2010-05-31 1
  2. 2. 개발 프로세스와 결과물 2010-05-31 2
  3. 3. MOTIVATION 새로운 기능 • 클래스 위자드 문법 자동 완성 기능 개선된 기능 • 인텔리 센스 레이 인트 수정된 기능 • 컴파일러 버그 수정 향상된• 문법 자동 완성 기능 • 인텔리센스 라이브 에러 리포팅 • WPF를 이용한 UI 구성 • 브레이크 포인트 • 디버깅 기능 • Find and Replace • Call Hierarchy • 향상된 Add-in Support • SQL Compact Database를 이용한 인 텔리 센스 DB파일WPF를 이용한 UI 구성 • PPL • 병열 스택 윈도우 • 병열 작업 디버그 윈도 우 Call Hierarchy • 자주 사용하는 클래스의 임베딩 • 최신 윈도즈용 애플리케 이션 개발 지원 • 대용량 코드 지원 • 멀티 스레드 디버깅 • 덤프 파일 분석 우 • C++0x • MSBuild 이션 개발 지원 • 최신 윈도즈에 VS가 잘 운영되도록 수정 • 브레이크 포인트 관리레이 인 관리 • 세밀한 빌드/링크 정보 2010-05-31 3
  4. 4. 최신의 개발환경을 지원 2010-05-31 4
  5. 5. EMBEDDED CLASS - SAFEINT 오버 플로우로 인한 오류를 방지하는 정수형 클래스 8bit 정수의 경우 200 + 100의 결과는 44 기계적으로 우아하게 이루어 지는 오버 플로우 #include <safeint.h> i l tilitiusing namespace msl::utilities; void foo() { SafeInt<unsigned int, _SAFEINT_DEFAULT_ERROR_POLICY> safeInt; }} 2010-05-31 5
  6. 6. DEMO 최신 개발 환경 지원 Add-in : Go To Definition 데이터 피닝 DUMP파일 2010-05-31 6
  7. 7. MOTIVATION 새로운 개발툴이 출시되면 새로운 기능 소개와 수정 코드 및 라이 브러리 점검소개와 수정 브러리 점검 2010-05-31 7
  8. 8. AGENDA Visual Studio 와 SDK 새로워진 Build System 소개 Multi Targeting 새로운 키워드 auto, static_assert, nullptr(__nullptr) CRT 강제 종료 문구 트라이그래프 Library 배포 정책 변경b a y 배 정책 변경 2010-05-31 8
  9. 9. 컴파일러와 SDK Windows SDK for Visual Studio 2010 Windows SDK for Windows7 2010-05-31 9
  10. 10. BUILD SYSTEM 빌드 환경을 꾸미기에 제한적임 모든 빌드 과정은 커맨드 라인으로 기술 되어 컴파일러 바 이너리 내부적으로 처리. 개발툴의 버전마다 모두 다름 제품 개발툴 컴파일툴 업그레이드 긴급패치 app1.exe VS2003 VS2003 x o 2 VS200 VS200app2.exe VS2005 VS2005 x o app3.exe VS2008 VS2008 o o 2010-05-31 10
  11. 11. BUILD SYSTEM 애플리케이션에 따라 빌드 환경을 꾸미기 위한 Visual Studio 혹은 Visual C++툴을 설치 프로젝트 파일(.vcproj)이 VS에 종속되어 있음. 크로스 컴파일이 안됨 (VS2005 <-/-> VS2008) 상위 버전의 VS에서 하위버전의 VS 프로젝트 파일을 여는 방법은 오로지 마이그레이션 위자드, 제품 개발툴 컴파일툴 업그레이드 긴급패치 app1.exe VS2003 VS2003 x o app2 exe VS2005 VS2005 x oapp2.exe VS2005 VS2005 x o app3.exe VS2008 VS2008 o o 2010-05-31 11
  12. 12. DEMO 변경된 프로젝트 파일 MSBuild 2010-05-31 12
  13. 13. MULTI TARGETING 멀티타겟팅 최신버전이 제공하는 IDE 및 코딩, 디버깅 환경을 이용 하위 호환의 바이너리 생성 다양한 플랫폼의 프로젝트를 섞어 사용 Visual Studio 2005에서 .NET 언어에 지원 Native 언어를 위한 멀티타겟팅 VS2010은 Windows 2000을 지원하지 않음. 그럼 어떻게? 2010-05-31 13
  14. 14. MULTI TARGETING 프로젝트 파일이 VS의 버전에 종속되지 않는 XML양식으로 변경 툴셋을 설정하여 범용적인 컴파일러를 선택하는 환경 새로운 프로젝트 파일을 참조하여 툴셋마다 다른 방법을 제공하는 빌드환경이 가능해짐 VS2010을 에디터로 사용하면서 컴파일러 멀티 타겟팅이 가능해짐 이전 VS를 풀로 설치할 필요 없이 컴파일러만 설치 하면 됨. VS2010과 필요한 SDK 설치 만으로 많은 플랫폼 지원 가능 2010-05-31 14
  15. 15. MULTI TARGETING Project -> Properties -> Configuration Properties -> General - > Platform Toolset 플랫폼 툴셋 = 컴파일러 + 컴파일에 필요한 도구 + 라이브러리 + 헤 더파일 + 링커 IDE를 제외하고 바이너리를 생성하는데 필요한 전체 셋IDE를 제외하고 바이너리를 생성하는데 필요한 전체 셋 2010-05-31 15
  16. 16. MULTI TARGETING 지원하는 플랫폼 플랫폼 툴셋을 만들 수 있는 모든 환경 지원 VS2008, 2005… 2002… VC6… CE/Windows Mobile.. 문제가 있을 경우 도움을 받으세요 “특정 버전의 플랫폼 툴셋을 구성하기 위해서 해당 Visual Studio 혹은 Visual C++을 모두 설치해야 하나요?” VC6 : Platform SDK Feb. 2003 VS2008 : Windows SDK for Windows server 2008 VS2010 : Windows SDK for Windows7 2010-05-31 16
  17. 17. MULTI TARGETING 커스텀 컴파일러 설정 %PROGRAMFILES%MSBuildMicrosoft.Cppv4.0Platforms Win32PlatformToolsets Microsoft.Cpp.<Platform>.<PlatformToolset>.props Microsoft.Cpp.Win32.v100.props Microsoft.Cpp.Win32.v100.targets 기본 컴파일러 설정 %PROGRAMFILES%MSBuildMicrosoft.Cppv4.0Platforms Win32Microsoft.Cpp.Win32.default.props 2010-05-31 17
  18. 18. NEW KEYWORD - AUTO 기억 부류 지정자(Storage Class Specifier) : 일반적으로 선언자 앞에 쓰여 컴파일러에게 할당되는 공간의 존속시간과 가시성을 알 려주는 키워드려주는 키워드 auto, register, static, extern / mutable auto l l lif ti 을 가지는 t ti 변수local lifetime을 가지는automatic 변수 블록 안쪽에서만 유효하며 선언시 초기화를 해야 함. 2010-05-31 18
  19. 19. NEW KEYWORD - AUTO C++0x에서 auto는 기억 부류 지정자가 아닌 타입 연역자(Type Deduction)로 키워드가 사용됨 타입 연역자 : 초기화 되는 값에 따라 변수의 타입이 정해지게 됨타입 연역자 : 초기화 되는 값에 따라 변수의 타입이 정해지게 됨. 템플릿의 이터레이터 선언이나 람다 표현식, 함수포인터등에 유연하게 사용됨 auto a = 1; // int auto b = “abcd”; // basic_string<char> auto c = new A(); // class A t 를 타입 연역자가 아닌 기억 부류 지정자로 사용 auto c   new A(); // class A auto를 타입 연역자가 아닌 기억 부류 지정자로 사용 Project -> Properties -> Configuration Properties -> C/C++ -> Command Line에 /Zc:auto- 추가 2010-05-31 19
  20. 20. NEW KEYWORD – STATIC_ASSERT 실행시점 이전인 컴파일 시점에 코드를 검증 템플릿의 구현체 코드를 정확하게 사용했는지 검증하는데 유용하게 사용 template<typename T> b l C (T 1 T 2)bool Compare(T v1, T v2) { static_assert(std::tr1::is_integral<T>::value, "숫자가 아님"); return v1 > v2; }} 2010-05-31 20
  21. 21. NEW KEYWORD – NULLPTR, __NULLPTR C++에선 없는 값을 표현하는 값이 존재하지 않았음. 델파이의 nil #ifdef __cplusplus #define NULL    0 #else void foo(TCHAR const * str) {}; void main() #else #define NULL    ((void *)0) #endif { foo(false);  // 컴파일 성공 foo(true); // 컴파일 실패 } 0이 특정 값이면 0xFFFFFFFF0이 특정 값이면 0 nullptr, __nullptr이 새로운 키워드로 추가 2010-05-31 21
  22. 22. 그밖에,.. CRT 함수가 사용하는 힙 지정 __MSVCRT_HEAP_SELECT 환경 변수 제거 /OPT:WIN98, /OPT:NOWIN98 제거 삭제된 항목들은 대안이 없음. 2010-05-31 22
  23. 23. DEMO 변경 사항 검사 2010-05-31 23
  24. 24. CRT ABORT DIALOG terminate(), abort() 애플리케이션에서 terminate가 호출됐다는 것은 종료가 의도 CRT의 종료 메시지는 불필요 만일, 종료 다이얼로그 및 메시지를 인식하는 UI테스트 코드와 같은 경우 변경이 필요 2010-05-31 24
  25. 25. TRIGRAPH C코드는 7비트 ASCII에 포함된 문자로 구성되는 것이 표준 1983년에 지저오딘 83개의 문자를 가진 ISO 646-1983 문자셋 지원 83개의 문자를 벗어나는 문자는 별도의 방법을 통해 입력할 수 있도 록 트라이 그래프를 지원 및 인식 Visual C++ 컴파일러는 트라이 그래프를 지원 Trigraph Equivalent Trigraph Equivalent Trigraph Equivalent ??= # ??( [ ??< { ??/ ??) ] ??> }??/ ??) ] ??> } ??' ^ ??! | ??- ~ ??=include <iostream> // #include<iostream> id i ()void main() ??< std::cout << "??/??/" << std::endl; // cout << "" << endl; ??> 2010-05-31 25
  26. 26. TRIGRAPH 잘 쓰이지 않는 지원에 따른 불편함이 존재 C4837 Warning ‘?’는 이스케이프 시퀀스로 ‘?’ 사용 TCHAR* str1 = TEXT("C:*.P??"); TCHAR* str2 = TEXT("Typ1 (*.p??)|*.p??|Typ2 (*.d??)|*.d??|Alle Dateien (*.*)|*.*||"); CFileDialog FileDialog(TRUE, NULL, str1, OFN_FILEMUSTEXIST, str2, NULL); Visual Studio 2010에서는 트라이그래프의 기본 옵션이 Disablesua Stud o 0 0에서는 라이 래 의 기본 옵션이 sab e /Zc:trigraphs 2010-05-31 26
  27. 27. LIBRARY 배포 정책 –배 정책 LEGACY 지금까지의 Library 배포 정책은 격리된 응용 프로그램(Isolated Application), Side-by-side로 요약됨 격리된 응용 프로그램 : manifests를 이용하여 private 어셈블리와, shared 어셈블리를 애플리케이션의 manifest로 기술 Shared 어셈블리는 Side by side 어셈블리 형태로 설치 재배포 패Shared 어셈블리는 Side-by-side 어셈블리 형태로 설치. 재배포 패 키지를 이용. Private 어셈블리는 실행파일과 함께 배포/설치 되고 해당 설치 프Private 어셈블리는 실행파일과 함께 배 /설치 되 해당 설치 로그램만을 위해 사용되는 어셈블리. Shared 어셈블리 권장. 2010-05-31 27
  28. 28. LIBRARY 배포 정책 – SIDE-LIBRARY 배포 정책 SIDE BY-SIDE ASSEMBLIES권장 Side-by-side 어셈블리는 DLL 버전이 충돌하는 것을 막아줌 다양한 버전의 COM이나 윈도즈 어셈블리가 실행 되도 side-by- side 어셈블리를 공유함. 애플리케이션 제공 업체나 관리자는 Side-by-side 어셈블리를 publisher configuration file이나 per application configurationpublisher configuration file이나 per-application configuration 파일 생성/변경으로 업데이트 할 수 있다. Side-by-side 어셈블리 업데이트 과정에서 반드시 재배포 패키지를Side by side 어셈블리 업데이 과정에서 반 시 재배 패키지를 설치하거나 제품을 다시 설치할 필요가 없다 2010-05-31 28
  29. 29. LIBRARY 배포 정책 – 어배 정책 어 셈블리 검색 순서 1. Side-by-side는 ko-kr 버전을 WinSxS에서 찾음. 2. c:myappko-krmyasm.dll 3. c:myappko-krmyasm.manifest 4. c:myappko-krmyasmmyasm.dll 5. c:myappko-krmyasmmyasm.manifest5. c:myappko krmyasmmyasm.manifest 6. Side-by-side는 ko 버전을 WinSxS에서 찾음. 7. c:myappkomyasm.dll 8. c:myappkomyasm.manifest 9. c:myappkomyasmmyasm.dll 10 c:myappkomyasmmyasm manifest10. c:myappkomyasmmyasm.manifest 11. Side-by-side는 en-us 버전을 WinSxS에서 찾음. 12. c:myappen-usmyasm.dll 13. c:myappen-usmyasm.manifest 14. c:myappen-usmyasmmyasm.dll 15 c:myappen usmyasmmyasm manifest15. c:myappen-usmyasmmyasm.manifest 16. Side-by-side는 en 버전을 WinSxS에서 찾음. 17. c:myappenmyasm.dll 18. c:myappenmyasm.manifest 19. c:myappenmyasmmyasm.dll 20 if t20. c:myappenmyasmmyasm.manifest 21. Side-by-side는 언어가 없는 버전의 라이브러리를 WinSxS에서 찾음. 22. c:myappmyasm.dll 23. c:myappmyasm.manifest 24. c:myappmyasmmyasm.dll 2010-05-31 29 25. c:myappmyasmmyasm.manifest
  30. 30. LIBRARY 배포 정책 –배 정책 LEGACY <assembly xmlns="urn:schemas microsoft com:asm v1" manifestVersion="1 0"><assembly xmlns= urn:schemas-microsoft-com:asm.v1 manifestVersion= 1.0 > <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel> </requestedPrivileges>q g </security> </trustInfo> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.30729.1" A hit t " 86" bli K T k "1f 8b3b9 1 18 3b"></ bl Id tit >processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8"y y yp processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> </assembly> 서비스팩 설치 이후 라이브러리를 모두 재 컴파일, 바인딩 상수 선언 Static 빌드, policy 확인 또는 <이미지이름>.config의 bindingRedirect로 정책 변경 임의의 버전을 선택해서 메니페스트를 구성 2010-05-31 30
  31. 31. LIBRARY 배포 정책 –배 정책 LEGACY “같은 폴더에 라이브러리가 있는데도 실행이 안되요” “재배포 패키지를 삭제하니 애플리케이션이 실행되지 않아요” “시키는 대로 다 했는데도 애플리케이션이 실행되지 않아요” “클라이언트 PC의 정책 설정과 manifest설정이 어려워요” 2010-05-31 31
  32. 32. LIBRARY 배포 정책 중앙 배치 CentralCentral Deployment 지역 배치 정적 링크 Local Deployment 정적 링크 static linking 2010-05-31 32
  33. 33. LIBRARY 배포 정책 중앙 배포 : system32 폴더에 라이브러리들을 복사, system32안 에 들어 있기 때문에 윈도우 업데이트가 쉽게 찾을 수 있어 라이브러 리 업데이트가 용이 재배포 패키지나 머지 모듈을 통하여 배포리 업데이트가 용이. 재배포 패키지나 머지 모듈을 통하여 배포. 지역 배포 : 애플리케이션이 위치한 폴더에 라이브러리 파일들을 위 치 시키는 방식이며 간편하게 해당 애플리케이션만 적용. 중앙 배포 와의 차이점은 윈도 라이브러리를 통하여 업데이트를 하지 않는가 차이 정적 링크 애플리케이션 안쪽에 라이브러리를 포함정적 링크 : 애플리케이션 안쪽에 라이브러리를 포함. 2010-05-31 33
  34. 34. LIBRARY 배포 정책 Visual Studio 2010의 라이브러리는 Side-by-side 폴더에 생성되 지 않는다. 지역 배치 방식이 우선적임 OS 관련 라이브러리는 중앙 배포 우선 2010-05-31 34
  35. 35. 궁금한 것이 있을 때 포럼을 http://social.msdn.microsoft.com/Forums/en- US/category/visualc 2010-05-31 35
  36. 36. REFERENCE Breaking Changes in Visual C++ - MSDN 라이브러리 http://msdn.microsoft.com/en- us/library/bb531344(v=VS.100).aspx Exploring New C++ and MFC Features in Visual Studio 2010 - Sumit KumarSumit Kumar http://msdn.microsoft.com/en-us/magazine/ee336130.aspx D l t i Vi l C++ 2010Deployment in Visual C++ 2010 http://msdn.microsoft.com/en- us/library/dd293574%28VS.100%29.aspxus/library/dd293574%28VS.100%29.aspx 2010-05-31 36

×