Aggiungi il supporto Arm alla tua applicazione Windows
Articolo
I dispositivi basati su Arm stanno diventando sempre più popolari grazie alla loro natura parsimoniosa, alla maggiore durata della batteria e all'impressionante potenza di elaborazione, oltre al supporto di Windows on Arm per le Unità di Elaborazione Neurale (NPU), ottimizzate per i sempre più diffusi carichi di lavoro di AI e Machine Learning.
Questa guida illustra i passaggi per aggiungere il supporto alle tue applicazioni Windows per i dispositivi dotati di processori Arm64. La guida tratterà anche i modi per affrontare eventuali problemi o blocchi (come dipendenze o plug-in di terze parti) che potrebbero interferire con la creazione di una versione basata su Arm64 della tua applicazione.
Emulazione su dispositivi basati su Arm per applicazioni Windows x86 o x64
Le versioni Arm di Windows 10 includono una tecnologia di emulazione che consente alle applicazioni x86 esistenti e non modificate di essere eseguite su dispositivi Arm. Windows 11 estende l'emulazione per eseguire applicazioni Windows x64 non modificate su dispositivi Arm.
Sebbene la possibilità di emulare x64 e x86 su dispositivi Arm sia un grande passo avanti, questa guida ti aiuterà ad aggiungere il supporto Arm-nativo, in modo che la tua applicazione possa sfruttare i vantaggi delle prestazioni native e le qualità uniche dei dispositivi Arm64, tra cui:
Ottimizzare il consumo energetico della tua app per prolungare la durata della batteria del dispositivo.
Ottimizzazione delle prestazioni per CPU, GPU e NPU per accelerare i flussi di lavoro, in particolare quando si lavora con l'intelligenza artificiale.
Inoltre, i driver del kernel devono essere costruiti come nativi Arm64. Nel kernel non è presente alcuna emulazione. Questo ha un impatto soprattutto sugli scenari di virtualizzazione. Per le applicazioni che utilizzano driver di dispositivi che richiedono l'accesso diretto agli interni del sistema operativo o dell'hardware in esecuzione in modalità kernel, piuttosto che in modalità utente, e che non sono ancora state aggiornate per supportare i processori Arm64, consulta Costruire driver Arm64 con il WDK.
Nota
Le Progressive Web App (PWA) vengono già eseguite con le prestazioni native di Arm64.
Prerequisiti
Se stai aggiornando la tua applicazione utilizzando un dispositivo basato su Arm (compilazione nativa - generazione del codice per la stessa piattaforma su cui si sta eseguendo), puoi utilizzare:
Visual Studio 2022 v17.4 o successivo. Questa è la prima versione GA di Visual Studio che supporta in modo nativo la creazione e il debug di applicazioni Arm64 su processori basati su Arm. Sia Visual Studio 2022 17.4 che le versioni native Arm64 di Microsoft Visual C++ (MSVC) offrono prestazioni significativamente migliori rispetto alle precedenti versioni emulate.
(facoltativo) LLVM (Clang) v12+ o successivo. LLVM 12 aggiunge una release binaria ufficiale ospitata su Windows su Arm64, che include un compilatore Clang, un linker LLD e librerie runtime compiler-rt.
Se stai aggiornando la tua applicazione Windows per supportare Arm utilizzando un dispositivo x64 o x86 basato su Intel (compilazione incrociata), puoi utilizzare:
Ci sono diversi fattori da considerare quando si sceglie tra la compilazione incrociata e la compilazione nativa, come l'hardware disponibile e la semplicità di esecuzione dei test.
Passo 1 - Aggiungi una configurazione Arm64 al tuo progetto in Visual Studio
Per aggiungere una nuova piattaforma ARM64 con target di debug e release al tuo progetto di app x64 o x86 esistente:
Apri la tua soluzione (codice del progetto) in Visual Studio (vedi prerequisiti per le versioni supportate).
Nel menu a tendina "Piattaforme di soluzioni" della barra degli strumenti Standard (o nel menu "Costruisci"), seleziona Configuration Manager...
Apri il menu a tendina "Piattaforma di soluzioni attive" e seleziona <Nuovo...>.
Nel menu a tendina "Tipo o selezione della nuova piattaforma", seleziona ARM64 e assicurati che il valore "Copia impostazioni da" sia impostato su x64 con la casella di controllo "Crea nuove piattaforme di progetto" attivata, quindi seleziona OK.
Complimenti. Hai iniziato ad aggiungere il supporto Arm alla tua applicazione. Successivamente, controlla se la tua soluzione Arm64 viene compilata correttamente.
Se la tua soluzione non viene compilata correttamente, dovrai risolvere i problemi che causano il fallimento della compilazione. Il motivo più probabile è che una dipendenza non sia disponibile per ARM64, argomento trattato in Risoluzione dei problemi .
(facoltativo): Se vuoi verificare in prima persona che il binario della tua applicazione sia stato creato per Arm64, puoi aprire la directory del progetto in PowerShell (fai clic con il tasto destro del mouse sul progetto dell'applicazione in Visual Studio Solution Explorer e seleziona Open in Terminal). Cambia directory in modo da selezionare la nuova directory bin\ARM64\Debug o Release del tuo progetto. Inserisci il comando: dumpbin /headers .\<appname>.exe (sostituendo <appname> con il nome della tua applicazione). Scorri verso l'alto nei risultati di output del tuo terminale per trovare la sezione FILE HEADER VALUES e conferma che la prima riga è AA64 machine (ARM64).
Passo 2 - Testare ed eseguire il debug dell'applicazione Arm64 appena creata
Per verificare se la tua soluzione Arm64 viene compilata correttamente dopo aver aggiunto la piattaforma Arm64 al tuo progetto in Visual Studio:
Chiudi la finestra "Piattaforma di soluzioni attive".
Cambia l'impostazione di compilazione da Debug a Release.
Nel menu a tendina "Build", seleziona Rebuild Solution e attendi che il progetto venga ricostruito.
Riceverai un output "Ricostruisci tutti i successi". In caso contrario, consulta la sezione Risoluzione dei problemi .
Dopo aver compilato i file binari per l'app per supportare Arm64, si vuole testarli. Ciò richiederà la presenza di un dispositivo o di una macchina virtuale che esegue Windows in Arm.
Se si esegue lo sviluppo in un dispositivo Windows in Arm, è possibile configurare facilmente il debug locale di Visual Studio. Se la compilazione incrociata (usando un dispositivo che non è in esecuzione in un processore Arm), si vuole usare il debug remoto in un dispositivo Windows in Arm o in una macchina virtuale per abilitare l'esperienza di sviluppo in Visual Studio durante l'esecuzione dell'app Arm64 in un altro dispositivo.
Windows su hardware Arm o macchine virtuali disponibili per i test
Se stai cercando un hardware da utilizzare per la Continuous Integration (CI) e i test, ecco alcuni dei dispositivi Windows con processore Arm64:
Scopri di più su Windows 11 on Arm Insider Preview (VHDX) per creare una macchina virtuale locale Windows on Arm utilizzando Hyper-V e Windows Insider VHDX. *Le macchine virtuali Arm64 sono supportate solo su dispositivi che soddisfano i prerequisiti. La creazione di macchine virtuali Arm64 non è supportata su hardware x64: dovrai ospitare la macchina virtuale nel cloud, vedi il link di avvio rapido qui sopra.
Passo 3 - Costruisci e testa la tua app su dispositivi Arm
L'aggiunta di un passaggio di automazione dei test è una considerazione importante per la tua strategia di Continuous Integrations e Continuous Delivery (CI/CD). Per le soluzioni Arm64 che girano su Windows, è importante eseguire la suite di test sull'architettura Arm64: potrebbe trattarsi di Windows vero e proprio su hardware Arm, utilizzando uno dei dispositivi Arm elencati in precedenza, oppure di una macchina virtuale, tra le VM elencate in precedenza.
La compilazione dell'applicazione è più comoda se effettuata sullo stesso computer in cui si eseguono i test, ma in molti casi non è necessaria. Invece, puoi considerare di estendere l'infrastruttura di compilazione esistente per produrre un output cross-compilato per Arm64.
Passo 4 - Aggiornare il programma di installazione e pubblicare l'applicazione aggiornata
Se pubblichi sul Microsoft Store, una volta creata una versione Arm64 della tua applicazione seguendo i passaggi sopra descritti, puoi aggiornare il tuo pacchetto di applicazioni esistente nel Microsoft Store visitando la dashboard del tuo Partner Center e aggiungendo i nuovi binari ARM64 alla presentazione.
Se la tua applicazione non è già stata pubblicata nel Microsoft Store, puoi seguire le istruzioni per creare un'applicazione a seconda che tu voglia inviare un MSI o un EXE, un pacchetto MSIX, una PWA o un componente aggiuntivo dell'applicazione.
Se costruisci il tuo programma di installazione, devi assicurarti che sia in grado di installare con successo la nuova versione Arm64. La maggior parte dei framework di installazione, come WiX, Squirrel, InnoSetup, InstallAware, e altri supportano Windows su Arm senza problemi.
Se offri il programma di installazione della tua applicazione da una pagina web, puoi utilizzare User-Agent Client Hints per rilevare se il cliente sta visitando il sito da un dispositivo Windows on Arm e offrirgli la versione nativa Arm aggiornata della tua applicazione. A differenza della stringa user-agent, User-Agent Client Hints ti permette di differenziare i clienti su Arm da quelli su dispositivi x86.
Passo 5 - Pianificare gli aggiornamenti continui
Ora che hai pubblicato una versione Arm64 della tua applicazione, dovrai assicurarti che venga aggiornata nello stesso modo in cui lo fanno le altre versioni della tua applicazione. È meglio mantenere le versioni e le caratteristiche allineate tra le varie architetture per evitare che i clienti si confondano in futuro.
Risoluzione dei problemi
I problemi più comuni che possono interferire o bloccare l'aggiunta di una versione Arm64 di un'applicazione Windows x64 o x86 esistente includono:
Una dipendenza non compilata per ARM64 ti sta impedendo di completare la compilazione con successo
Se non riesci a compilare a causa di una dipendenza, sia essa interna, di terze parti o di una libreria open-source, dovrai trovare un modo per aggiornare tale dipendenza per supportare l'architettura ARM64 o rimuoverla.
Per le dipendenze interne, consigliamo di ricostruire la dipendenza per il supporto ARM64.
Per le dipendenze di terze parti, si consiglia di richiedere al manutentore la ricostruzione con supporto ARM64.
Per le dipendenze open source, controlla vcpkg per vedere se esiste una versione più recente della dipendenza che includa il supporto ARM64 e alla quale puoi aggiornarti. Se non esiste un aggiornamento, considera di contribuire tu stesso all'aggiunta del supporto ARM64 al pacchetto. Molti manutentori dell'open source sarebbero grati per il contributo.
Considera l'utilizzo di Arm64EC. Le versioni Arm64EC delle dipendenze possono essere utilizzate per ricostruire un'applicazione utilizzando ancora le versioni x64 delle dipendenze. Qualsiasi codice x64, compreso quello delle dipendenze, in un processo Arm64EC verrà eseguito in emulazione nella tua applicazione. (Le versioni Arm64 delle dipendenze non saranno utilizzabili in questo caso)
L'ultima scelta è quella di rimuovere e/o sostituire la dipendenza nel progetto dell'applicazione.
Il codice è scritto per un'architettura specifica diversa da Arm64
L'assemblaggio specifico della CPU o le chiamate a funzioni intrinseche inline dovranno essere modificate per adattarsi alle istruzioni e alle funzioni disponibili sulla CPU Arm. Per una guida, vedi: Utilizzare gli assembly e gli intrinseci nel codice C o C++.
La tua applicazione si basa su un driver del kernel
I driver del kernel devono essere costruiti come nativi Arm64. Nel kernel non è presente alcuna emulazione. Questo ha un impatto soprattutto sugli scenari di virtualizzazione. Per le applicazioni che utilizzano driver di dispositivi che richiedono l'accesso diretto agli interni del sistema operativo o dell'hardware in esecuzione in modalità kernel, piuttosto che in modalità utente, e che non sono ancora state aggiornate per supportare i processori Arm64, consulta Costruire driver Arm64 con il WDK.
Inoltre, i driver di su Windows devono essere costruiti come Arm64 e non possono essere emulati. Per le applicazioni che si basano su driver software che non sono ancora stati aggiornati per supportare i processori Arm64, consulta Building Arm64 Drivers with the WDK.
Toolchain per Windows su Arm
Oltre al supporto per Visual Studio e LLVM (CLANG) come condiviso nella sezione Prerequisiti di questa guida, i seguenti strumenti e framework sono supportati anche per Arm64:
clang-cl compila codice C++ per Windows e può sostituire il compilatore e linker MSVC. Utilizza ancora le intestazioni e le librerie di MSVC ed è ABI-compatibile con MSVC.
Hai bisogno di assistenza? Sfrutta il nostro servizio App Assure
Il servizio di consulenza App Assure Arm è disponibile per aiutare gli sviluppatori a creare applicazioni ottimizzate per Arm. Questo servizio si aggiunge alla nostra promessa già esistente: le tue app funzioneranno su Windows on Arm e, in caso di problemi, Microsoft ti aiuterà a risolverli. Altre informazioni.
L'origine di questo contenuto è disponibile in GitHub, in cui è anche possibile creare ed esaminare i problemi e le richieste pull. Per ulteriori informazioni, vedere la guida per i collaboratori.
Feedback su Windows on Arm
Windows on Arm è un progetto di open source. Selezionare un collegamento per fornire feedback: