Aggiornare il codice a Universal CRTUpgrade your code to the Universal CRT

In Visual Studio 2015 la libreria di runtime C Microsoft (CRT) è stata sottoposta a refactoring.In Visual Studio 2015, the Microsoft C Runtime Library (CRT) was refactored. La libreria C standard, le estensioni POSIX, le funzioni, le macro e le variabili globali specifiche di Microsoft sono state spostate in una nuova libreria, Universal CRT o UCRT.The Standard C Library, POSIX extensions and Microsoft-specific functions, macros, and global variables were moved into a new library, the Universal C Runtime Library (Universal CRT or UCRT). I componenti specifici del compilatore della libreria CRT sono stati spostati in una nuova libreria vcruntime.The compiler-specific components of the CRT were moved into a new vcruntime library.

La libreria UCRT è ora un componente di Windows ed è inclusa in Windows 10.The UCRT is now a Windows component, and ships as part of Windows 10. La libreria UCRT supporta un'ABI stabile basata sulle convenzioni di chiamata C ed è strettamente conforme allo standard ISO C99, con poche eccezioni.The UCRT supports a stable ABI based on C calling conventions, and it conforms closely to the ISO C99 standard, with only a few exceptions. Non è più associata a una versione specifica del compilatore.It is no longer tied to a specific version of the compiler. È possibile usare la libreria UCRT in qualsiasi versione di Windows supportata da Visual Studio 2015 o Visual Studio 2017.You can use the UCRT on any version of Windows supported by Visual Studio 2015 or Visual Studio 2017. Il vantaggio è che non è più necessario aggiornare le compilazioni per usare un nuova versione della libreria CRT con ogni aggiornamento di Visual Studio.The benefit is that you no longer need to update your builds to target a new version of the CRT with every upgrade of Visual Studio.

Con questo refactoring sono stati modificati i nomi o percorsi di molti file di intestazione CRT, di libreria e ridistribuibili nonché i metodi di distribuzione necessari per il codice.With this refactoring, the names or locations of many CRT header files, library files, and redistributables, and the deployment methods required for your code have changed. Inoltre, molte funzioni e macro di UCRT sono stati aggiunti o modificati per migliorare la conformità agli standard.In addition, many functions and macros in the UCRT were added or changed to improve standards conformance. Per sfruttare i vantaggi di queste modifiche, è necessario aggiornare il codice esistente e i sistemi di compilazione dei progetti.To take advantage of these changes, your existing code and project build systems must be updated.

Dove trovare i file della libreria Universal CRTWhere to find the Universal CRT files

Come componente di Windows, i file e le intestazioni della libreria UCRT ora fanno parte di Windows Software Development Kit (SDK).As a Windows component, the UCRT library files and headers are now part of the Windows software development kit (SDK). Quando si installa Visual Studio, vengono installate anche le parti di Windows SDK richieste per l'uso della libreria UCRT.When you install Visual Studio, the parts of the Windows SDK required to use the UCRT are also installed. Il programma di installazione di Visual Studio aggiunge i percorsi di intestazioni UCRT, librerie e file DLL ai percorsi predefiniti usati dal sistema di compilazione del progetto di Visual Studio.The Visual Studio installer adds the locations of the UCRT headers, libraries and DLL files to the default paths used by the Visual Studio project build system. Quando si aggiornano i progetti di Visual C++, se vengono usate le impostazioni di progetto predefinite, l'IDE individua automaticamente i nuovi percorsi per i file di intestazione e il linker usa automaticamente le nuove librerie UCRT e vcruntime predefinite.When you update your Visual C++ projects, if they use the default project settings, the IDE automatically finds the new locations for header files, and the linker automatically uses the new default UCRT and vcruntime libraries. Analogamente, se si usa un prompt dei comandi per gli sviluppatori per le compilazioni dalla riga di comando, le variabili di ambiente che contengono i percorsi per intestazioni e librerie vengono aggiornate e funzionano automaticamente.Similarly, if you use a Developer command prompt to do command-line builds, the environment variables that contain paths for headers and libraries are updated and work automatically as well.

I file di intestazione della libreria C standard sono ora disponibili in Windows SDK in una cartella di inclusione in una directory specifica della versione dell'SDK.The Standard C Library header files are now found in the Windows SDK in an include folder in an SDK version-specific directory. Un percorso tipico per i file di intestazione è nella directory Programmi o Programmi (x86) in Windows Kits\10\Include\versione-sdk\ucrt, dove versione-sdk corrisponde a una versione o un aggiornamento di Windows, ad esempio 10.0.14393.0 per l'aggiornamento dell'anniversario di Windows 10.A typical location for the header files is in the Program Files or Program Files (x86) directory under Windows Kits\10\Include\sdk-version\ucrt, where sdk-version corresponds to a Windows version or update, for example, 10.0.14393.0 for the Anniversary Update of Windows 10.

Le librerie UCRT statiche e le librerie stub a collegamento dinamico si trovano nella directory Programmi o Programmi (x86) in Windows Kits\10\Lib\versione-sdk\ucrt\architettura, dove architettura è ARM, x86 o X64.The UCRT static libraries and dynamic link stub libraries are found in the Program Files or Program Files (x86) directory under Windows Kits\10\Lib\sdk-version\ucrt\architecture, where architecture is ARM, x86, or X64. Le librerie statiche di debug e della versione finale sono libucrt.lib e libucrtd.lib e le librerie per le DLL UCRT sono ucrt.lib e ucrtd.lib.The retail and debug static libraries are libucrt.lib and libucrtd.lib, and the libraries for the UCRT DLLs are ucrt.lib and ucrtd.lib.

Le DLL UCRT di debug e della versione finale si trovano in percorsi separati.The retail and debug UCRT DLLs are found in separate locations. Le DLL della versione finale sono ridistribuibili e si trovano nella directory Programmi o Programmi (x86) in Windows Kits\10\Redist\ucrt\DLLs\architettura.The retail DLLs are redistributable, and can be found in the Program Files or Program Files (x86) directory under Windows Kits\10\Redist\ucrt\DLLs\architecture. Le librerie UCRT di debug non sono ridistribuibili e si trovano nella directory Programmi o Programmi (x86) nella cartella Windows Kits\10\bin\architettura\ucrt.Debug UCRT libraries are not redistributable, and can be found in the Program Files or Program Files (x86) directory under Windows Kits\10\bin\architecture\ucrt folder.

La libreria di supporto runtime specifica del compilatore C e C++, vcruntime, contiene il codice necessario per supportare l'avvio del programma e funzionalità come la gestione delle eccezioni e gli intrinseci.The C and C++ compiler-specific runtime support library, vcruntime, contains the code required to support program startup and features such as exception handling and intrinsics. La libreria e i relativi file di intestazione sono ancora disponibili nella cartella specifica della versione di Microsoft Visual Studio nella directory Programmi o Programmi (x86).The library and its header files are still found in the version-specific Microsoft Visual Studio folder in your Program Files or Program files (x86) directory. In Visual Studio 2017 le intestazioni si trovano in Microsoft Visual Studio\2017\versione\VC\Tools\MSVC\versione-lib\include e le librerie di collegamento sono disponibili in Microsoft Visual Studio\2017\versione\VC\Tools\MSVC\versione-lib\lib\architettura, dove versione è la versione di Visual Studio installata, versione-lib è la versione delle librerie e architettura è l'architettura del processore.In Visual Studio 2017, the headers are found under Microsoft Visual Studio\2017\edition\VC\Tools\MSVC\lib-version\include and the link libraries are found under Microsoft Visual Studio\2017\edition\VC\Tools\MSVC\lib-version\lib\architecture, where edition is the edition of Visual Studio installed, lib-version is the version of the libraries, and architecture is the processor architecture. Anche le librerie di collegamento per OneCore e archivio si trovano nella cartella delle librerie.Link libraries for OneCore and Store are also found in the libraries folder. Le versioni di debug e per la versione finale della libreria statica sono libvcruntime.lib e libvcruntimed.lib.The retail and debug versions of the static library are libvcruntime.lib and libvcruntimed.lib. Le librerie stub a collegamento dinamico di debug e della versione finale sono rispettivamente vcruntime.lib e vcruntimed.lib.The dynamic link retail and debug stub libraries are vcruntime.lib and vcruntimed.lib, respectively.

Quando si aggiornano i progetti Visual C++, se è stata impostata la proprietà Linker del progetto Ignora tutte le librerie predefinite su o si usa l'opzione del linker /NODEFAULTLIB sulla riga di comando, è necessario aggiornare l'elenco delle librerie per includere le nuove librerie di refactoring.When you update your Visual C++ projects, if you have set the project's Linker property Ignore All Default Libraries to Yes or if you use the /NODEFAULTLIB linker option on the command line, then you must update your list of libraries to include the new, refactored libraries. Sostituire la libreria CRT precedente, ad esempio libcmt.lib, libcmtd.lib, msvcrt.lib o msvcrtd.lib, con le librerie di refactoring equivalenti.Replace the old CRT library, for example, libcmt.lib, libcmtd.lib, msvcrt.lib, or msvcrtd.lib, with the equivalent refactored libraries. Per informazioni sulle librerie specifiche da usare, vedere Funzionalità della libreria CRT.For information on the specific libraries to use, see CRT Library Features.

Distribuzione e ridistribuzione della libreria Universal CRTDeployment and redistribution of the Universal CRT

Poiché la libreria UCRT ora è un componente del sistema operativo Microsoft Windows, è inclusa come parte del sistema operativo in Windows 10 ed è disponibile in Windows Update per i sistemi operativi precedenti, da Windows Vista a Windows 8.1.Because the UCRT is now a Microsoft Windows operating system component, it is included as part of the operating system in Windows 10 and is available through Windows Update for older operating systems, Windows Vista through Windows 8.1. Una versione ridistribuibile è disponibile per Windows XP.A redistributable version is available for Windows XP. Come componente del sistema operativo, gli aggiornamenti e la manutenzione della libreria UCRT vengono gestiti da Windows Update indipendentemente dalle versioni del compilatore di Visual Studio e Visual C++.As an operating system component, UCRT updates and servicing are managed by Windows Update independently of Visual Studio and Visual C++ compiler versions. Poiché la libreria UCRT è un componente di Windows, per migliorare la sicurezza e semplificare gli aggiornamenti, riducendo la dimensione dell'immagine, è consigliabile usare una distribuzione centrale della libreria UCRT per l'applicazione.Because the UCRT is a Windows component, for security and ease of updates, and a smaller image size, we strongly recommend central deployment of the UCRT for your app.

È possibile usare la libreria UCRT in qualsiasi versione di Windows supportata da Visual Studio 2015 o Visual Studio 2017.You can use the UCRT on any version of Windows supported by Visual Studio 2015 or Visual Studio 2017. La libreria può essere ridistribuita usando un pacchetto vcredist per le versioni supportate di Windows diverse da Windows 10.You can redistribute it using a vcredist package for supported versions of Windows other than Windows 10. I pacchetti vcredist includono i componenti UCRT e li installano automaticamente nei sistemi operativi Windows su cui non sono installati per impostazione predefinita.The vcredist packages include the UCRT components and automatically install them on Windows operating systems that do not have them installed by default. Per altre informazioni, vedere Ridistribuzione di file Visual C++.For more information, see Redistributing Visual C++ Files.

La distribuzione app-local della libreria UCRT è supportata, anche se non è consigliabile per motivi di prestazioni e di sicurezza.App-local deployment of the UCRT is supported, though not recommended for both performance and security reasons. Le DLL per la distribuzione app-local e sono incluse come parte di Windows SDK, nella sottodirectory redist.The DLLs for app-local deployment are included as part of the Windows SDK, under the redist subdirectory. Le DLL necessarie includono ucrtbase.dll e un set di DLL di inoltro APISet denominato api-ms-win-subset.dll.The DLLs required include ucrtbase.dll and a set of APISet forwarder DLLs named api-ms-win-subset.dll. Il set di DLL necessarie in ogni sistema operativo varia, quindi si consiglia di includere tutte le DLL quando si usa la distribuzione app-local.The set of DLLs required on each operating system varies, so we recommended that you include all of the DLLs when you use app-local deployment. Per altri dettagli e suggerimenti relativi alla distribuzione app-local, vedere Distribuzione in Visual C++.For additional details and caveats about app-local deployment, see Deployment in Visual C++.

Modifiche a funzioni e macro di Universal CRTChanges to the Universal CRT functions and macros

Molte funzioni sono state aggiunte o aggiornate nella libreria UCRT per migliorare la conformità ISO C99 e risolvere i problemi relativi alla qualità e alla sicurezza del codice.Many functions were added or updated in the UCRT to improve ISO C99 conformance, and to address code quality and security issues. In alcuni casi è stato necessario apportare modifiche significative alla libreria.In some cases, this required breaking changes to the library. Se il codice viene compilato correttamente quando si usa una versione precedente della libreria CRT ma si interrompe se viene compilato con UCRT, è necessario modificare il codice per poter usufruire di funzionalità e aggiornamenti.If your code compiled cleanly when using an older version of the CRT but breaks when compiled using the UCRT, you must change your code to take advantage of these updates and features. Per un elenco dettagliato delle modifiche e degli aggiornamenti importanti della libreria CRT rilevati nella libreria Universal CRT, vedere la sezione Libreria di runtime C (CRT) della cronologia delle modifiche di Visual C++.For a detailed listing of the breaking changes and updates to the CRT found in the Universal CRT, see the C Runtime Library (CRT) section of the Visual C++ change history. La sezione contiene un elenco di intestazioni e funzioni interessate che è possibile usare per identificare le modifiche necessarie nel codice.It includes a list of affected headers and functions that you can use to identify the changes needed in your code.

Vedere ancheSee Also

Guida al porting e aggiornamento in Visual C++Visual C++ Porting and Upgrading Guide
Panoramica dei potenziali problemi di aggiornamento (Visual C++)Overview of potential upgrade issues (Visual C++)
Aggiornamento di progetti da versioni precedenti di Visual C++Upgrading Projects from Earlier Versions of Visual C++
Cronologia delle modifiche di Visual C++ dal 2003 al 2015Visual C++ change history 2003 - 2015
Miglioramenti della conformità di C++ in Visual Studio 2017C++ conformance improvements in Visual Studio 2017