Risoluzione dei problemi di conversione di Windows Phone Silverlight 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 Windows Telefono Silverlight, 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 e TargetPlatformMinVersion. 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
Il parser XAML o il compilatore restituisce l'errore "Il nome "<typename>" non esiste nello spazio dei nomi [...]". Se <typename> è un tipo personalizzato, nelle dichiarazioni di prefisso dello spazio dei nomi nel markup XAML modificare "clr-namespace" in "using" e rimuovere eventuali token del gruppo. Per i tipi di piattaforma, questo significa che il tipo non si applica al piattaforma UWP (Universal Windows Platform), quindi trovare l'equivalente e aggiornare il markup. Esempi che potrebbero verificarsi subito sono phone:PhoneApplicationPage e shell:SystemTray.IsVisible.
Il parser XAML o il compilatore restituisce l'errore "Il membro "<membername>" non è riconosciuto o non è accessibile." oppure "La proprietà "<propertyname>" non è stata trovata nel tipo [...].". Questi errori inizieranno a essere visualizzati dopo aver convertito alcuni nomi di tipo, ad esempio la Pagina radice. Il membro o la proprietà non si applica alla piattaforma UWP, quindi trovare l'equivalente e aggiornare il markup. Esempi che potrebbero verificarsi subito sono SupportedOrientations e Orientation.
Il parser XAML o il compilatore restituisce l'errore "La proprietà associabile [...] non è stato trovato [...]." o "Membro associabile sconosciuto [...].". Questo è probabilmente causato dal tipo anziché dalla proprietà associata; in questo caso, si avrà già un errore per il tipo e questo errore andrà via una volta corretto. Esempi che potrebbero verificarsi subito sono phone:PhoneApplicationPage.Resources e phone:PhoneApplicationPage.DataContext.
Il parser XAML o il compilatore o un'eccezione di runtime restituisce l'errore "Impossibile risolvere la risorsa "<resourcekey>".". La chiave di risorsa non si applica alle app piattaforma UWP (Universal Windows Platform). Trovare la risorsa equivalente corretta e aggiornare il markup. Alcuni esempi che potrebbero verificarsi immediatamente sono le chiavi di stile TextBlock di sistema, ad esempio PhoneTextNormalStyle.
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 compilatore non conosce ancora lo spazio dei nomi UWP corretto per un tipo. Usare il comando Risolvi di Visual Studio per correggerlo.
Se l'API non è nel set di API note come famiglia di dispositivi universali (in altre parole, l'API viene implementata in un SDK di estensione), usare gli SDK di estensione.
In altri casi la porta è meno semplice. Esempi che potrebbero verificarsi subito sono DesignerProperties e BitmapImage.
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.
Errore XamlCompiler WMC0055: impossibile assegnare il valore di testo '<geometria del flusso>' alla proprietà 'Clip' di tipo 'RectangleGeometry' Nella piattaforma UWP il tipo dell'app è UWP Microsoft DirectX e XAML C++.
Errore XamlCompiler WMC0001: tipo sconosciuto 'RadialGradientBrush' nello spazio dei nomi XML [...] La piattaforma UWP non ha il tipo RadialGradientBrush. Rimuovere RadialGradientBrush dal markup e usare un altro tipo di app UWP Microsoft DirectX e XAML C++.
Errore xamlCompiler WMC0011: membro sconosciuto 'OpacityMask' sull'elemento '<Tipo UIElement>' L'app UWP Microsoft DirectX e XAML C++ UWP.
Si è verificata una prima eccezione di tipo 'System.Runtime.InteropServices.COMException' in SYSTEM. NI.DLL. Altre informazioni: L'applicazione ha chiamato un'interfaccia su cui era stato eseguito il marshalling per un thread differente. (Eccezione da HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)). Il lavoro che si sta eseguendo deve essere eseguito nel thread dell'interfaccia utente. Chiamare CoreWindow.GetForCurrentThread).
Un'animazione è in esecuzione, ma non ha alcun effetto sulla proprietà di destinazione. Rendere l'animazione indipendente o impostarla EnableDependentAnimation="True" su di essa. Vedere Animazione.
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.

L'argomento successivo è Conversione di XAML e interfaccia utente.