Visual C++ 포팅 및 업그레이드 가이드Visual C++ Porting and Upgrading Guide

이 항목에서는 Visual C++ 코드를 업그레이드하기 위한 가이드를 제공합니다.This topic provides a guide for upgrading Visual C++ code. 여기에는 최신 릴리스의 도구에서 코드가 올바르게 컴파일 및 실행되도록 하고 새로운 언어와 Visual Studio 기능을 활용하는 방법이 포함됩니다.This includes getting the code to compile and run correctly on a newer release of the tools, as well as taking advantage of new language and Visual Studio features. 또한 이 항목에는 레거시 앱을 최신 플랫폼으로 마이그레이션하는 방법에 대한 정보가 포함되어 있습니다.This topic also includes information about migrating legacy apps to more modern platforms.

Visual C++ 코드를 업그레이드하는 이유Reasons to Upgrade Visual C++ Code

코드 업그레이드를 고려해야 하는 이유는 다음과 같습니다.You should consider upgrading your code for the following reasons:

  • 향상된 컴파일러 최적화로 인한 코드 속도 향상Faster code, due to improved compiler optimizations.

  • 컴파일러 자체의 성능 향상으로 인한 빌드 속도 향상Faster builds, due to performance improvements in the compiler itself.

  • 향상된 표준 준수Improved standards conformance. 이제 Visual C++에서 최신 C++ 표준의 많은 기능을 구현합니다.Visual C++ now implements many features from the latest C++ standards.

  • 보안 강화.Better security. 보호 검사와 같은 보안 기능입니다.Security features such as guard checking.

코드 포팅Porting your Code

업그레이드하는 경우 먼저 응용 프로그램의 코드와 프로젝트를 고려합니다.When upgrading, first consider your application's code and projects. 응용 프로그램이 Visual Studio를 사용하여 빌드되었나요?Is your application built with Visual Studio? 이 경우 관련된 프로젝트를 식별합니다.If so, identify the projects involved. 사용자 지정 빌드 스크립트가 있나요?Do you have custom build scripts? Visual Studio의 빌드 시스템을 사용하는 대신 사용자 지정 빌드 스크립트가 있는 경우 Visual Studio에서 프로젝트 파일 및 빌드 설정을 업데이트하도록 하여 시간을 절약할 수 없기 때문에 업그레이드할 때 더 많은 작업을 수행해야 합니다.If you have custom build scripts instead of using Visual Studio's build system, you will have more work to do in upgrading, because you can't save time by having Visual Studio update your project files and build settings.

Visual Studio의 빌드 시스템 및 프로젝트 파일 형식은 Visual Studio 2008까지 버전의 vcbuild에서 Visual Studio 2010 이후 버전의 MSBuild로 변경되었습니다.The build system and project file format in Visual Studio changed from vcbuild in versions up to Visual Studio 2008 to MSBuild in versions of Visual Studio from 2010 onwards. 2010 이전 버전에서 업그레이드하고 사용자 지정 빌드 시스템이 있는 경우 업그레이드하려면 더 많은 작업을 수행해야 할 수 있습니다.If your upgrade is from a version prior to 2010, and you have a highly customized build system, you might have to do more work to upgrade. Visual Studio 2010 이상에서 업그레이드하는 경우 프로젝트에서 이미 MSBuild를 사용 중이므로 응용 프로그램에 대한 프로젝트 및 빌드 업그레이드가 훨씬 용이합니다.If you are upgrading from Visual Studio 2010 or later, your projects are already using MSBuild, so upgrading the project and build for your application should be easier.

Visual Studio의 빌드 시스템을 사용하지 않는 경우 MSBuild를 사용하도록 업그레이드하는 것이 좋습니다.If you are not using Visual Studio's build system, you should consider upgrading to use MSBuild. MSBuild를 사용하도록 업그레이드하면 이후 업그레이드가 훨씬 쉬워지며 Visual Studio Online과 같은 서비스를 쉽게 사용할 수 있습니다.If you upgrade to use MSBuild, you might have an easier time in future upgrades, and it will be easier to use services such as Visual Studio Online. MSBuild는 Visual Studio에서 지원하는 모든 대상 플랫폼을 지원합니다.MSBuild supports all the target platforms that Visual Studio supports.

Visual Studio 프로젝트 포팅Porting Visual Studio Projects

프로젝트 또는 솔루션 업그레이드를 시작하려면 새 버전의 Visual Studio에서 솔루션을 열고 지시에 따라 업그레이드를 시작합니다.To start upgrading a project or solution, just open the solution in the new version of Visual Studio, and follow the prompts to start upgrading it. 프로젝트를 업그레이드하면 업그레이드 보고서가 표시되며, UpgradeLog.htm으로 프로젝트 폴더에 저장됩니다.When you upgrade a project, you get an upgrade report, which is also saved in your project folder as UpgradeLog.htm. 업그레이드 보고서는 업그레이드 프로세스 중 발생한 문제에 대한 요약과 변경 내용 또는 자동으로 해결할 수 없는 문제에 대한 일부 정보를 보여 줍니다.The upgrade report shows a summary of what problems were encountered during the upgrade process and some information about changes that were made, or problems that could not be addressed automatically.

  1. 프로젝트 속성Project properties

  2. 포함 파일Include files

  3. 표준의 컴파일러 규칙 향상 또는 변경으로 인해 더 이상 오류 없이 컴파일되지 않는 코드Code that no longer compiles cleanly due to compiler conformance imrovements or changes in the standard

  4. 더 이상 사용할 수 없는 Visual Studio 또는 Windows 기능 또는 Visual Studio 기본 설치에 포함되지 않거나 제품에서 제거된 헤더 파일을 사용하는 코드Code that relies on Visual Studio or Windows features that are no longer available or header files that either aren't included in a default installation of Visual Studio, or were removed from the product

  5. 이름이 바뀐 API, 변경된 함수 서명 또는 사용되지 않는 함수와 같은 API 변경 내용으로 인해 더 이상 컴파일되지 않는 코드Code that no longer compiles due to changes in APIs such as renamed APIs, changed function signatures, or deprecated functions

  6. 경고가 오류로 바뀌는 경우 등 진단 변경 내용으로 인해 더 이상 컴파일되지 않는 코드Code that no longer compiles due to changes in diagnostics, such as warning becoming an error

  7. 특히 /NODEFAULTLIB가 사용되는 경우 변경된 라이브러리로 인한 링커 오류Linker errors due to libraries that were changed, especially when /NODEFAULTLIB is used.

  8. 동작 변경 내용으로 인한 런타임 오류 또는 예기치 않은 결과Runtime errors or unexpected results due to behavior changes

  9. 도구에 도입된 오류로 인한 오류Errors due to errors that were introduced in the tools. 문제가 발생하는 경우 일반적인 지원 채널을 통해 또는 Visual Studio 사용자 의견 센터를 사용하여 Visual C++ 팀에 보고합니다.If you encounter an issue, report it to the Visual C++ team through your normal support channels or by using the Visual Studio Feedback Center.

    컴파일러 오류로 인한 필연적인 변경 내용 외에도 다음과 같은 일부 변경 내용은 업그레이드 프로세스에서 선택 사항입니다.In addition to changes that you can't avoid due to compiler errors, some changes are optional in an upgrade process, such as:

  10. 새 경고에서 코드를 정리하도록 의미할 수 있습니다.New warnings might mean you want to clean up your code. 특정 진단에 따라 이 작업은 코드의 포팅 가능성, 표준 준수 및 보안을 향상시킬 수 있습니다.Depending on the specific diagnostics, this can improve the portability, standards conformance, and security of your code.

  11. 승인되지 않은 코드 실행에 대한 검사를 추가하는 /guard:cf(흐름 제어 보호 사용) 컴파일러 옵션과 같은 새로운 컴파일러 기능을 활용하는 것이 좋습니다.You might want to take advantage of newer compiler features such as the /guard:cf (Enable Flow Control Guard) compiler option, which adds checks for unauthorized code execution.

  12. 코드를 간소화하는 새로운 언어 기능을 사용하거나, 프로그램의 성능을 향상시키거나, 최신 라이브러리를 사용하고 최신 표준 및 모범 사례를 준수하도록 일부 코드를 업데이트할 수 있습니다.You might want to update some code to use new language features that simplify the code, improve the performance of your programs, or update the code to use modern libraries and conform to modern standards and best practices.

    프로젝트를 업그레이드하고 테스트한 후 코드를 추가로 개선하거나 코드의 이후 방향을 계획하거나 프로젝트의 아키텍처를 다시 고려할 수도 있습니다.Once you've upgraded and tested your project, you might also want to consider improving your code further or plan the future direction of your code, or even reconsider the architecture of your project. 진행 중인 개발 작업을 받게 되나요?Will it receive ongoing development work? 코드가 다른 플랫폼에서 실행되는 것이 중요한가요?Will it be important for your code to run on other platforms? 중요하다면 어떤 플랫폼인가요?If so, what platforms? C++는 포팅 가능성과 플랫폼 간 개발을 염두에 두고 설계된 표준화된 언어이지만 많은 Windows 응용 프로그램의 코드는 여전히 Windows 플랫폼에 긴밀히 연결되어 있습니다.C++ is a standardized langauge designed with portability and cross-platform development in mind, and yet the code for many Windows applications is strongly tied to the Windows platform. 코드를 리팩터링하여 Windows 플랫폼에 연결된 부분을 분리하고 싶으세요?Do you want to refactor your code, to separate out those parts that are more tied to the Windows platform?

    사용자 인터페이스는 어떤가요?What about your user interface? MFC를 사용하는 경우 UI를 업데이트하는 것이 좋습니다.If you are using MFC, you might want to update the UI. 2008에서 기능 팩으로 도입된 최신 MFC 기능을 사용 중인가요?Are you using any of the newer MFC features that were introduced in 2008 as a Feature Pack? 전체 앱을 다시 작성하지 않고 앱에 최신 모양과 느낌을 제공하려는 경우 MFC의 리본 API를 사용하거나 MFC의 새로운 기능 중 일부를 사용할 수 있습니다.If you just want to give your app a newer look and feel, without rewriting the entire app, you might consider using the ribbon APIs in MFC, or using some of new features of MFC.

    프로그램에 XAML 사용자 인터페이스를 제공하려 하지만 UWP 앱을 만들지 않으려는 경우, WPF와 함께 C#을 사용하여 UI 레이어를 만들고 표준 C++ 논리를 DLL로 리팩터링할 수 있습니다.If you want to give your program a XAML user-interface but don't want to create a UWP app, you can use C# with WPF to create the UI layer and refactor your standard C++ logic into DLLs. C++/CLI에서 상호 운용성 레이어를 만들어 C#을 네이티브 코드에 연결합니다.Create an interoperability layer in C++/CLI to connect C# with your native code. 또 다른 옵션은 C++/CX 또는 C++/WinRT를 사용하여 UWP 앱을 만드는 것입니다.Another option is to create a UWP app using C++/CX or C++/WinRT. Windows 10에서는 Desktop App Converter를 사용하여 코드를 수정하지 않고도 기존 데스크톱 응용 프로그램을 UWP 앱으로 패키징할 수 있습니다.In Windows 10, you can use the Desktop App Converter to package your existing desktop application as a UWP app without having to modify any code.
    또는 이제 새로운 요구 사항이 있거나, Windows Phone 또는 Android 장치와 같은 Windows 데스크톱 이외의 플랫폼을 대상으로 지정해야 할 필요성을 예상할 수 있습니다.Alternatively, perhaps you now have new requirements, or you can foresee the need for targeting platforms other than Windows desktop, such as Windows Phone, or Android devices. 사용자 인터페이스 코드를 플랫폼 간 UI 라이브러리로 포팅할 수 있습니다.You could port your user interface code to a cross-platform UI library. 이러한 UI 프레임워크를 사용하면 여러 장치를 대상으로 지정하고 여전히 Visual Studio 및 Visual Studio 디버거를 개발 환경으로 사용할 수 있습니다.With these UI frameworks, you can target multiple devices and still use Visual Studio and the Visual Studio debugger as your development environment.

제목Title 설명Description
이전 버전의 Visual C++에서 프로젝트 업그레이드Upgrading Projects from Earlier Versions of Visual C++ 이전 버전의 Visual C++에서 만든 프로젝트를 사용하는 방법을 설명합니다.Discusses how to use projects created in earlier versions of Visual C++.
Visual Studio 2017 RC의 Visual C++에 대한 새로운 기능What's New for Visual C++ in Visual Studio 2017 RC Visual Studio 2015와 Visual Studio 2017 간의 IDE 및 도구 변경 내용Changes in the IDE and tools from Visual Studio 2015 to Visual Studio 2017
Visual Studio 2017의 C++ 규칙 향상C++ conformance improvements in Visual Studio 2017 Visual Studio 2015와 Visual Studio 2017 간의 표준 준수 향상Standards conformance improvements from Visual Studio 2015 to Visual Studio 2017
Visual C++ 변경 기록 2003 - 2015Visual C++ change history 2003 - 2015 코드 변경이 필요할 수 있는 Visual Studio 2003과 2015 간 Visual C++ 라이브러리 및 빌드 도구의 모든 변경 내용 목록입니다.A list of all the changes in the Visual C++ libraries and build tools from Visual Studio 2003 through 2015 that might require changes in your code.
Visual C++ 2003 ~ 2015의 새로운 기능Visual C++ What's New 2003 through 2015 Visual Studio 2003과 Visual Studio 2015 간의 Visual C++에 대한 모든 "새로운 기능" 정보입니다.All the "what's new" information for Visual C++ from Visual Studio 2003 through Visual Studio 2015.
타사 라이브러리 포팅Porting 3rd-party libraries vcpkg 명령줄 도구를 사용하여 이전 오픈 소스 라이브러리를 최신 Visual C++ 도구 집합으로 컴파일된 버전으로 포팅하는 방법입니다.How to use the vcpkg command line tool to port older open-source libraries to versions compiled with more recent Visual C++ toolsets.
포팅 및 업그레이드: 예제 및 사례 연구Porting and Upgrading: Examples and Case Studies 이 섹션에서는 여러 가지 샘플 및 응용 프로그램을 포팅 및 업그레이드하고 경험과 결과를 설명했습니다.For this section, we ported and upgrades several samples and applications and discussed the experiences and results. 이러한 내용을 읽으면 포팅 및 업그레이드 프로세스와 관련된 사항을 이해하는 데 도움이 될 수 있습니다.You might find that reading these gives you a sense of what is involved in the porting and upgrading process. 프로세스 전반에 걸쳐 업그레이드를 위한 팁과 트릭을 설명하고 특정 오류를 수정한 방법을 보여 줍니다.Throughout the process, we discuss tips and tricks for upgrading and show how specific errors were fixed.
유니버설 Windows 플랫폼으로 포팅Porting to the Universal Windows Platform Windows 10으로 코드를 이식하는 방법에 대한 정보를 포함합니다.Contains information about porting code to Windows 10
UNIX 사용자를 위한 Visual C++ 소개Introduction to Visual C++ for UNIX Users Visual C++를 처음 사용하며 생산성을 높이려는 UNIX 사용자에게 정보를 제공합니다.Provides information for UNIX users who are new to Visual C++ and want to become productive with it.
UNIX에서 Win32로 포팅Porting from UNIX to Win32 UNIX 응용 프로그램을 Windows로 마이그레이션하는 옵션을 설명합니다.Discusses options for migrating UNIX applications to Windows.
C++/CLI 마이그레이션 입문C++/CLI Migration Primer 새 구문을 사용하도록 Managed Extensions for C++ 구문을 업그레이드하는 방법을 자세히 보여 줍니다.Shows in detail how to upgrade your Managed Extensions for C++ syntax to use the new syntax. 자세한 내용은 런타임 플랫폼의 구성 요소 확장을 참조하세요.For more information, see Component Extensions for Runtime Platforms.

참고 항목See Also

Visual C++Visual C++