Обновление кода для универсальной среды выполнения

Библиотека среды выполнения Microsoft C (CRT) была рефакторингова в Visual Studio 2015. Расширения стандартной библиотеки C, POSIX и характерные для Майкрософт функции были перемещены в новую библиотеку — библиотеку универсальной среды C (универсальной CRT или UCRT). Компоненты компилятора были перемещены в новую библиотеку vcruntime.

UCRT теперь является компонентом Windows и поставляется в составе Windows 10 и более поздних версий. UCRT поддерживает стабильные соглашения о вызовах ABI на основе C и более точно соответствует стандарту ISO C99 с несколькими исключениями. Он больше не привязан к определенной версии компилятора. UCRT можно использовать в любой версии Windows, поддерживаемой Visual Studio 2015 или Visual Studio 2017. Преимущество в том, что больше не требуется обновлять сборки для соответствия новой версии CRT при каждом обновлении Visual Studio.

Эта рефакторинг изменила имена или расположения многих файлов заголовков CRT, файлов библиотеки и распространяемых файлов, а также методов развертывания, необходимых для кода. Многие функции и макросы в UCRT также были добавлены или изменены для повышения соответствия стандартам. Чтобы воспользоваться этими изменениями, необходимо обновить существующие системы сборки кода и проекта.

Где найти файлы универсальной среды выполнения

Так как UCRT является компонентом Windows, файлы и заголовки библиотеки UCRT теперь входят в состав пакета SDK Windows. При установке Visual Studio также устанавливаются компоненты пакета SDK Windows, необходимые для использования UCRT. Установщик Visual Studio добавляет расположения файлов заголовков и библиотек и DLL-файлов в пути по умолчанию, используемые в системе сборки проектов Visual Studio. При обновлении проектов Visual Studio C++ при использовании параметров проекта по умолчанию интегрированная среда разработки автоматически находит новые расположения для файлов заголовков. И компоновщик автоматически использует новые библиотеки UCRT и vcruntime по умолчанию. Аналогичным образом при использовании командной строки разработчика для построений из командной строки переменные среды, содержащие пути для заголовков и библиотек, будут автоматически обновлены и готовы к работе.

Теперь файлы заголовков стандартной библиотеки C находятся в пакете SDK Windows SDK в папке include в каталоге версии пакета SDK. Обычное расположение файлов заголовков находится в каталоге Program Files или Program Files (x86) в Windows Kits\10\Include\[sdk-version]\ucrtразделе , где [sdk-version] соответствует версии Или обновлению Windows, например 10.0.14393.0 для юбилейного обновления Windows 10.

Статические библиотеки UCRT и библиотеки заглушки динамических ссылок находятся в каталоге Program Files или Program Files (x86) в каталоге Windows Kits\10\Lib\[sdk-version]\ucrt\[architecture]ARM64 architecture , x86 или X64. Розничные и отладочные статические библиотеки: libucrt.lib и libucrtd.libбиблиотеки для библиотек DLL UCRT.ucrt.libucrtd.lib

Отладочные и розничные версии библиотек DLL среды UCRT находятся в разных местах. Библиотеки DLL розничной торговли являются распространяемыми файлами, и их можно найти в каталоге Program Files или Program Files (x86) в разделе Windows Kits\10\Redist\ucrt\DLLs\[architecture]\. Отладка библиотек UCRT не является распространяемыми файлами, и их можно найти в каталоге Program Files или Program Files (x86) в Windows Kits\10\bin\[architecture]\ucrt папке.

Где найти стандартные библиотеки и заголовки

Библиотека поддержки среды выполнения для компилятора C и C++ содержит код, vcruntimeнеобходимый для поддержки запуска программы и функций, таких как обработка исключений и встроенные компоненты. Библиотека и его файлы заголовков по-прежнему находятся в папке Microsoft Visual Studio версии в каталоге Program Files или Program files (x86).

В Visual Studio 2017, 2019 и 2022 файлы заголовков находятся в разделе Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\include. Вот версия Visual Studio, [year][edition] является выпуском или псевдонимом Для Visual Studio и [lib-version] является версией сборки библиотек.

Библиотеки ссылок находятся Microsoft Visual Studio\[year]\[edition]\VC\Tools\MSVC\[lib-version]\lib\[architecture]в разделе , [year] где версия Visual Studio, является выпуском или псевдонимом Для Visual Studio, [edition][lib-version] является версией сборки библиотек и [architecture] является целевой архитектурой процессора. Библиотеки компоновки для OneCore и Магазина также находятся в папке библиотек.

Розничные и отладочные версии статической библиотеки:libvcruntime.liblibvcruntimed.lib Библиотеки динамической компоновки для розничной торговли и отладки заглушки имеют vcruntime.lib и vcruntimed.libсоответственно.

При обновлении проектов Visual Studio C++ если свойство компоновщика проекта не учитывает все библиотеки /NODEFAULTLIB по умолчанию или используете параметр компоновщика в командной строке, необходимо обновить список библиотек, чтобы включить новые, рефакторинговые библиотеки. Замените старую библиотеку CRT, например , libcmt.liblibcmtd.libmsvcrt.lib, или msvcrtd.libэквивалентными рефакторингными библиотеками. Сведения об используемых библиотеках см. в разделе "Функции библиотеки CRT".

Развертывание и распространение универсальной среды выполнения

Так как UCRT теперь является компонентом операционной системы Microsoft Windows, он входит в состав операционной системы в Windows 10 и более поздних версий. Она доступна через Обновл. Windows для старых операционных систем, Windows Vista через Windows 8.1. Распространяемая версия доступна для Windows XP. Как компонент операционной системы управление обновлениями и обслуживанием UCRT осуществляется с помощью Центра обновления Windows независимо от версий Visual Studio и компилятора Microsoft C++. Так как UCRT — это компонент Windows, для обеспечения безопасности и простоты обновлений, а также меньший размер образа, настоятельно рекомендуется использовать распространяемый пакет для централизованного развертывания UCRT для приложения.

Вы можете использовать UCRT в любой версии Windows, поддерживаемой Visual Studio 2015 или более поздней. Его можно распространить с помощью vcredist пакета для поддерживаемых версий Windows до Windows 10. Пакеты vcredist включают компоненты UCRT и автоматически устанавливают их в операционных системах Windows, которые не установлены по умолчанию. Дополнительные сведения см. в разделе Распространение файлов Visual C++.

Поддерживается развертывание локальных приложений UCRT, хотя этот вариант является нерекомендуемым по соображениям безопасности и производительности. Библиотеки DLL для локального развертывания UCRT приложения включены в состав пакета SDK для Windows в подкаталоге redist . Необходимые библиотеки DLL включают ucrtbase.dll и набор DLL-библиотек api-ms-win-[subset].dllпересылки APISet. Для каждой операционной системы требуется разный набор библиотек DLL, поэтому при развертывании локальных приложений рекомендуется включать все библиотеки DLL. Дополнительные сведения и рекомендации по развертыванию локального приложения см. в разделе "Развертывание" в Visual C++.

Изменения функций и макросов универсальной среды выполнения

Многие функции были добавлены или обновлены в UCRT для повышения соответствия стандарту ISO C99, а также для устранения проблем, связанных с качеством и безопасностью кода. В некоторых случаях требовалось внести критические изменения в библиотеку. Код, скомпилированный чисто при использовании более старой версии CRT, может нарушиться при компиляции с помощью UCRT. В этом случае необходимо изменить код, чтобы воспользоваться преимуществами обновлений и функций UCRT. Подробный список критических изменений и обновлений для универсальной среды выполнения в разделе Библиотека времени выполнения C (CRT) в журнале изменений Visual C++. В него входит перечень затронутых заголовков и функции, который можно использовать для определения изменений, необходимых для кода.

См. также

Руководство по переносу и обновлению Visual C++
Общие сведения о возможных проблемах, возникающих при обновлении (Visual C++)
Обновление проектов с более ранних версий Visual C++
Журнал изменений Visual C++ 2003–2015
Улучшения соответствия C++ в Visual Studio