Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

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

on

  • 4,155 views

마이크로소프트웨어 C++ 사용자를 위한 VS2010 세미나

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

Statistics

Views

Total Views
4,155
Views on SlideShare
4,150
Embed Views
5

Actions

Likes
2
Downloads
5
Comments
0

1 Embed 5

http://www.slideshare.net 5

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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