s#03 김용현:vs2010으로 마이그레이션

36
VISUAL STUDIO 2010 으로의 마이그레이션 김용현 [email protected] WWW.YHKIM.COM MICROSOFT MVP 2010-05-31 1

Upload: codercay

Post on 14-Dec-2014

3.338 views

Category:

Technology


9 download

DESCRIPTION

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

TRANSCRIPT

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

VISUAL STUDIO 2010 으로의마이그레이션

김용현 [email protected]

WWW.YHKIM.COM

MICROSOFT MVP

2010-05-31 1

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

개발 프로세스와 결과물

2010-05-31 2

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

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

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

최신의 개발환경을 지원

2010-05-31 4

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

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

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

DEMO최신개발환경지원

Add-in : Go To Definition

데이터피닝

DUMP파일

2010-05-31 6

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

MOTIVATION새로운 개발툴이 출시되면

새로운기능소개와수정

코드및라이브러리점검소개와수정 브러리점검

2010-05-31 7

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

AGENDAVisual Studio 와 SDK새로워진 Build System 소개Multi Targeting

새로운키워드

auto, static_assert, nullptr(__nullptr)

CRT 강제종료문구트라이그래프

Library 배포정책변경b a y배 정책변경

2010-05-31 8

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

컴파일러와 SDKWindows SDK for Visual Studio 2010Windows SDK for Windows7

2010-05-31 9

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

BUILD SYSTEM빌드환경을꾸미기에제한적임

모든빌드과정은커맨드라인으로기술되어컴파일러바이너리내부적으로처리.

개발툴의버전마다모두다름

제품 개발툴 컴파일툴 업그레이드 긴급패치

app1.exe VS2003 VS2003 x o2 VS200 VS200app2.exe VS2005 VS2005 x o

app3.exe VS2008 VS2008 o o

2010-05-31 10

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

BUILD SYSTEM애플리케이션에따라빌드환경을꾸미기위한 Visual Studio 혹은Visual C++툴을설치프로젝트파일(.vcproj)이 VS에종속되어있음.크로스컴파일이안됨 (VS2005 <-/-> VS2008)상위버전의 VS에서하위버전의 VS프로젝트파일을여는방법은오로지마이그레이션위자드,

제품 개발툴 컴파일툴 업그레이드 긴급패치

app1.exe VS2003 VS2003 x oapp2 exe VS2005 VS2005 x oapp2.exe VS2005 VS2005 x oapp3.exe VS2008 VS2008 o o

2010-05-31 11

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

DEMO변경된프로젝트파일

MSBuild

2010-05-31 12

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

MULTI TARGETING멀티타겟팅

최신버전이제공하는 IDE및코딩, 디버깅환경을이용하위호환의바이너리생성

다양한플랫폼의프로젝트를섞어사용

Visual Studio 2005에서 .NET 언어에지원Native 언어를위한멀티타겟팅

VS2010은Windows 2000을지원하지않음. 그럼어떻게?

2010-05-31 13

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

MULTI TARGETING프로젝트파일이 VS의버전에종속되지않는 XML양식으로변경툴셋을설정하여범용적인컴파일러를선택하는환경

새로운프로젝트파일을참조하여툴셋마다다른방법을제공하는빌드환경이가능해짐

VS2010을에디터로사용하면서컴파일러멀티타겟팅이가능해짐이전 VS를풀로설치할필요없이컴파일러만설치하면됨.VS2010과필요한 SDK 설치만으로많은플랫폼지원가능

2010-05-31 14

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

MULTI TARGETINGProject -> Properties -> Configuration Properties -> General -> Platform Toolset

플랫폼툴셋 = 컴파일러 + 컴파일에필요한도구 + 라이브러리 + 헤더파일 + 링커IDE를제외하고바이너리를생성하는데필요한전체셋IDE를제외하고바이너리를생성하는데필요한전체셋

2010-05-31 15

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

MULTI TARGETING지원하는플랫폼

플랫폼툴셋을만들수있는모든환경지원

VS2008, 2005… 2002… VC6… CE/Windows Mobile..

문제가있을경우도움을받으세요

“특정버전의플랫폼툴셋을구성하기위해서해당 Visual Studio 혹은 Visual C++을모두설치해야하나요?”

VC6 : Platform SDK Feb. 2003VS2008 : Windows SDK for Windows server 2008VS2010 : Windows SDK for Windows7

2010-05-31 16

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

MULTI TARGETING커스텀컴파일러설정

%PROGRAMFILES%\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\PlatformToolsetsMicrosoft.Cpp.<Platform>.<PlatformToolset>.props

Microsoft.Cpp.Win32.v100.propsMicrosoft.Cpp.Win32.v100.targets

기본컴파일러설정

%PROGRAMFILES%\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.default.props

2010-05-31 17

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

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

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

NEW KEYWORD -AUTOC++0x에서 auto는기억부류지정자가아닌타입연역자(Type Deduction)로키워드가사용됨타입연역자 :초기화되는값에따라변수의타입이정해지게됨타입연역자 : 초기화되는값에따라변수의타입이정해지게됨.템플릿의이터레이터선언이나람다표현식, 함수포인터등에유연하게사용됨

auto a = 1; // intauto 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

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

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

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

NEW KEYWORD –NULLPTR, __NULLPTRC++에선없는값을표현하는값이존재하지않았음.델파이의 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이특정값이면 0nullptr, __nullptr이새로운키워드로추가

2010-05-31 21

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

그밖에,..CRT 함수가사용하는힙지정 __MSVCRT_HEAP_SELECT 환경변수제거

/OPT:WIN98, /OPT:NOWIN98 제거삭제된항목들은대안이없음.

2010-05-31 22

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

DEMO변경사항검사

2010-05-31 23

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

CRT ABORT DIALOGterminate(), abort()

애플리케이션에서 terminate가호출됐다는것은종료가의도CRT의종료메시지는불필요만일, 종료다이얼로그및메시지를인식하는 UI테스트코드와같은경우변경이필요

2010-05-31 24

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

TRIGRAPHC코드는 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

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

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

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

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

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

LIBRARY 배포 정책 – SIDE-LIBRARY 배포 정책 SIDEBY-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

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

LIBRARY 배포 정책 – 어배 정책 어셈블리 검색 순서

1. Side-by-side는 ko-kr 버전을 WinSxS에서 찾음.

2. c:\myapp\ko-kr\myasm.dll

3. c:\myapp\ko-kr\myasm.manifest

4. c:\myapp\ko-kr\myasm\myasm.dll

5. c:\myapp\ko-kr\myasm\myasm.manifest5. c:\myapp\ko kr\myasm\myasm.manifest

6. Side-by-side는 ko 버전을 WinSxS에서찾음.

7. c:\myapp\ko\myasm.dll

8. c:\myapp\ko\myasm.manifest

9. c:\myapp\ko\myasm\myasm.dll

10 c:\myapp\ko\myasm\myasm manifest10. c:\myapp\ko\myasm\myasm.manifest

11. Side-by-side는 en-us 버전을 WinSxS에서찾음.

12. c:\myapp\en-us\myasm.dll

13. c:\myapp\en-us\myasm.manifest

14. c:\myapp\en-us\myasm\myasm.dll

15 c:\myapp\en us\myasm\myasm manifest15. c:\myapp\en-us\myasm\myasm.manifest

16. Side-by-side는 en 버전을 WinSxS에서찾음.

17. c:\myapp\en\myasm.dll

18. c:\myapp\en\myasm.manifest

19. c:\myapp\en\myasm\myasm.dll

20 \ \ \ \ if t20. c:\myapp\en\myasm\myasm.manifest

21. Side-by-side는 언어가없는버전의라이브러리를 WinSxS에서찾음.

22. c:\myapp\myasm.dll

23. c:\myapp\myasm.manifest

24. c:\myapp\myasm\myasm.dll

2010-05-31 29

25. c:\myapp\myasm\myasm.manifest

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

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 ypprocessorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

</dependentAssembly></dependency>

</assembly>

서비스팩설치이후라이브러리를모두재컴파일, 바인딩상수선언Static 빌드, policy 확인또는 <이미지이름>.config의 bindingRedirect로정책변경임의의버전을선택해서메니페스트를구성

2010-05-31 30

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

LIBRARY 배포 정책 –배 정책LEGACY “같은폴더에라이브러리가있는데도실행이안되요”“재배포패키지를삭제하니애플리케이션이실행되지않아요”“시키는대로다했는데도애플리케이션이실행되지않아요”“클라이언트 PC의정책설정과manifest설정이어려워요”

2010-05-31 31

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

LIBRARY 배포 정책

중앙배치CentralCentral

Deployment

지역배치정적링크 Local

Deployment정적링크

static linking

2010-05-31 32

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

LIBRARY 배포 정책

중앙배포 : system32 폴더에라이브러리들을복사, system32안에들어있기때문에윈도우업데이트가쉽게찾을수있어라이브러리업데이트가용이 재배포패키지나머지모듈을통하여배포리업데이트가용이. 재배포패키지나머지모듈을통하여배포.지역배포 : 애플리케이션이위치한폴더에라이브러리파일들을위치시키는방식이며간편하게해당애플리케이션만적용. 중앙배포와의차이점은윈도라이브러리를통하여업데이트를하지않는가차이

정적링크 애플리케이션안쪽에라이브러리를포함정적링크 : 애플리케이션안쪽에라이브러리를포함.

2010-05-31 33

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

LIBRARY 배포 정책

Visual Studio 2010의라이브러리는 Side-by-side 폴더에생성되지않는다.지역배치방식이우선적임

OS 관련라이브러리는중앙배포우선

2010-05-31 34

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

궁금한 것이 있을 때 포럼을

http://social.msdn.microsoft.com/Forums/en-US/category/visualc

2010-05-31 35

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

REFERENCEBreaking Changes in Visual C++ - MSDN 라이브러리http://msdn.microsoft.com/en-us/library/bb531344(v=VS.100).aspxExploring New C++ and MFC Features in Visual Studio 2010 -Sumit KumarSumit Kumarhttp://msdn.microsoft.com/en-us/magazine/ee336130.aspxD l t i Vi l C++ 2010Deployment in Visual C++ 2010http://msdn.microsoft.com/en-us/library/dd293574%28VS.100%29.aspxus/library/dd293574%28VS.100%29.aspx

2010-05-31 36