Risoluzione dei problemi di conversione da Windows Runtime 8.x a UWP
L'argomento precedente stava effettuando il porting del progetto.
È consigliabile leggere la fine di questa guida alla conversione, ma si è anche consapevoli che si è ansiosi di proseguire e passare alla fase in cui il progetto viene compilato ed eseguito. A tal fine, è possibile fare progressi temporanei commentando o stubando qualsiasi codice non essenziale e quindi restituendo per pagare il debito in un secondo momento. La tabella dei sintomi e dei rimedi per la risoluzione dei problemi in questo argomento può essere utile in questa fase, anche se non è un sostituto per la lettura dei prossimi argomenti. È sempre possibile fare riferimento alla tabella mentre si procede con gli argomenti successivi.
Individuazione dei problemi
Le eccezioni di parsing XAML possono essere difficili da diagnosticare, soprattutto se non ci sono messaggi di errore significativi all'interno dell'eccezione. Assicurarsi che il debugger sia configurato per rilevare le eccezioni first-chance (per provare e intercettare l'eccezione di analisi all'inizio). È possibile esaminare la variabile di eccezione nel debugger per determinare se HRESULT o messaggio contiene informazioni utili. Controllare anche la finestra di output di Visual Studio per individuare i messaggi di errore restituiti dal parser XAML.
Se l'app termina e tutto quello che si sa è che è stata generata un'eccezione non gestita durante l'analisi del markup XAML, questo potrebbe essere il risultato di un riferimento a una risorsa mancante (ovvero una risorsa la cui chiave esiste per Le app di Universal 8.1, ma non per le app di Windows 10, ad esempio alcuni tasti di stile TextBlock di sistema). Potrebbe anche trattarsi di un'eccezione generata in un UserControl, in un controllo personalizzato o in un pannello di layout personalizzato.
Un'ultima risorsa è una divisione binaria. Rimuovere metà del markup da una pagina ed eseguire di nuovo l'app. Si scoprirà così se l'errore si trova all'interno della metà rimossa (che ora si dovrà comunque ripristinare) o nella metà che non si è rimosso. Ripetere il processo suddividendo la metà che contiene l'errore e così via, fino a quando non si è azzerato nel problema.
TargetPlatformVersion
Questa sezione spiega cosa fare se, all'apertura di un progetto Windows 10 in Visual Studio, viene visualizzato il messaggio "Aggiornamento di Visual Studio obbligatorio. Uno o più progetti richiedono una <version> di Platform SDK non installata o inclusa come parte di un aggiornamento futuro di Visual Studio".
- Prima di tutto, determinare il numero di versione dell'SDK per Windows 10 installato. Passare a C:\Program Files (x86)\Windows Kits\10\Include\<versionfoldername> e prendere nota di <versionfoldername>, che sarà in notazione quad, "Major.Minor.Build.Revision".
- Aprire il file di progetto per la modifica e trovare gli elementi
TargetPlatformVersion
eTargetPlatformMinVersion
. Modificarli in modo che sia simile al seguente, sostituendo <versionfoldername> con il numero di versione della notazione quad trovato sul disco:
<TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
<TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>
Sintomi e rimedi di risoluzione dei problemi
Le informazioni di rimedio nella tabella sono destinate a dare informazioni sufficienti per sbloccare. Sono disponibili altri dettagli su ognuno di questi problemi durante la lettura degli argomenti successivi.
Sintomo | Rimedio |
---|---|
All'apertura di un progetto Windows 10 in Visual Studio viene visualizzato il messaggio "Aggiornamento di Visual Studio obbligatorio. Uno o più progetti richiedono una <version> di Platform SDK non installata o inclusa come parte di un aggiornamento futuro di Visual Studio". | Vedere la sezione TargetPlatformVersion in questo argomento. |
Viene generata un'eccezione System.InvalidCastException quando initializeComponent viene chiamato in un file xaml.cs. | Ciò può verificarsi quando si ha più di un file XAML (almeno uno dei quali è qualificato da MRT) che condividono lo stesso file xaml.cs e gli elementi hanno attributi x:Name incoerenti tra i due file xaml. Provare ad aggiungere lo stesso nome agli stessi elementi in entrambi i file xaml o omettere completamente i nomi. |
Quando viene eseguita nel dispositivo, l'app termina o quando viene avviata da Visual Studio, viene visualizzato l'errore "Impossibile attivare l'app Windows Runtime 8.x [...]. La richiesta di attivazione non è riuscita e viene visualizzato l'errore "Windows non è riuscito a comunicare con l'applicazione di destinazione. Ciò indica in genere che il processo dell'applicazione di destinazione è stato interrotto. […]”. | Il problema potrebbe essere il codice imperativo in esecuzione nelle proprie pagine o in proprietà associate (o altri tipi) durante l'inizializzazione. In alternativa, potrebbe verificarsi durante l'analisi del file XAML che sta per essere visualizzato quando l'app viene terminata (se si avvia da Visual Studio, questa sarà la pagina di avvio). Cercare chiavi di risorsa non valide e/o provare alcune indicazioni nella sezione "Problemi di rilevamento in questo argomento". |
Il parser XAML o il compilatore o un'eccezione di runtime restituisce l'errore "Impossibile risolvere la risorsa "<resourcekey>".". | La chiave della risorsa non si applica alle app piattaforma UWP (Universal Windows Platform), ad esempio con alcune risorse Windows Phone. Trovare la risorsa equivalente corretta e aggiornare il markup. Alcuni esempi che possono verificarsi immediatamente sono chiavi di sistema, ad esempio PhoneAccentBrush . |
Il compilatore C# restituisce l'errore "Impossibile trovare il tipo o il nome dello spazio dei nomi '<nome>' [...]" o "Il tipo o il nome dello spazio dei nomi '<nome>' non esiste nello spazio dei nomi [...]" o "Il tipo o il nome dello spazio dei nomi '<nome>' non esiste nel contesto corrente". | Questo significa probabilmente che il tipo viene implementato in un SDK di estensione (anche se potrebbe esserci casi in cui il rimedio non è così semplice). Usare il contenuto di riferimento delle API di Windows per determinare quale SDK di estensione implementa l'API e quindi usare il comando Aggiungi>Riferimento di Visual Studio per aggiungere un riferimento a tale SDK al progetto. Se l'app è destinata al set di API note come famiglia di dispositivi universali, è fondamentale usare la classe ApiInformation per testare in fase di esecuzione la presenza dell'SDK di estensione prima di chiamarle (questo è detto codice adattivo). Se esiste un'API universale, è sempre preferibile a un'API in un SDK di estensione. Per maggiori info, vedere SDK di estensione. |
L'argomento successivo è Conversione di XAML e interfaccia utente.