Configurare progetti Windows

Aggiunta di nuovi progetti Windows a una soluzione esistente Xamarin.Forms

Le soluzioni meno recenti Xamarin.Forms (o quelle create in macOS) non avranno progetti di app piattaforma UWP (Universal Windows Platform) (UWP). Dovrai quindi aggiungere manualmente un progetto UWP per compilare un'app Windows 10 (UWP).

Aggiungere un'app piattaforma UWP (Universal Windows Platform)

Visual Studio 2019 in Windows 10 è consigliato per compilare app UWP. Per altre informazioni sul piattaforma UWP (Universal Windows Platform), vedere Introduzione al piattaforma UWP (Universal Windows Platform).

La piattaforma UWP è disponibile nella Xamarin.Forms versione 2.1 e versioni successive e Xamarin.Forms.Mappe è supportata nella Xamarin.Forms versione 2.2 e versioni successive.

Per suggerimenti utili, vedere la sezione relativa alla risoluzione dei problemi .

Segui queste istruzioni per aggiungere un'app UWP che verrà eseguita su telefoni, tablet e desktop Windows 10:

1. Fare clic con il pulsante destro del mouse sulla soluzione e scegliere Aggiungi > nuovo progetto e aggiungere un progetto App vuota (Windows universale):

Add New Project Dialog

2. Nella finestra di dialogo Nuovo progetto piattaforma UWP (Universal Windows Platform) selezionare le versioni minime e di destinazione di Windows 10 in cui verrà eseguita l'app:

New Universal Windows Platform Project Dialog

3. Fare clic con il pulsante destro del mouse sul progetto UWP e scegliere Gestisci pacchetti NuGet e aggiungere il Xamarin.Forms pacchetto. Assicurarsi che anche gli altri progetti nella soluzione vengano aggiornati alla stessa versione del Xamarin.Forms pacchetto.

4. Assicurarsi che il nuovo progetto UWP venga compilato nella finestra Build > Configuration Manager (probabilmente non sarà successo per impostazione predefinita). Selezionare le caselle Compila e Distribuisci per il progetto universale:

Configuration Manager Window

5. Fare clic con il pulsante destro del mouse sul progetto e selezionare Aggiungi > riferimento e creare un riferimento al Xamarin.Forms progetto dell'applicazione (progetto condiviso o .NET Standard).

Reference Manager Dialog

6. Nel progetto UWP modificare App.xaml.cs per includere la Init chiamata al metodo all'interno del metodo intorno alla OnLaunched riga 52:

// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter

7. Nel progetto UWP modificare MainPage.xaml rimuovendo l'elemento Grid contenuto all'interno dell'elemento Page .

8. In MainPage.xaml aggiungere una nuova xmlns voce per Xamarin.Forms.Platform.UWP:

xmlns:forms="using:Xamarin.Forms.Platform.UWP"

9. In MainPage.xaml modificare l'elemento radice <Page in <forms:WindowsPage:

<forms:WindowsPage
...
   xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>

10. Nel progetto UWP modificare MainPage.xaml.cs per rimuovere l'identificatore : Page di ereditarietà per il nome della classe (poiché ora erediterà da WindowsPage a causa della modifica apportata nel passaggio precedente):

public sealed partial class MainPage  // REMOVE ": Page"

11. In MainPage.xaml.cs aggiungere la LoadApplication chiamata nel MainPage costruttore per avviare l'appXamarin.Forms:

// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());

Nota

L'argomento del LoadApplication metodo è l'istanza Xamarin.Forms.Application definita nel progetto .NET Standard.

12. Aggiungere eventuali risorse locali (ad esempio file di immagine) dai progetti di piattaforma esistenti necessari.

Risoluzione dei problemi

"Eccezione chiamata di destinazione" quando si usa "Compila con la catena di strumenti .NET Native"

Se la tua app UWP fa riferimento a più assembly (ad esempio librerie di controlli di terze parti o la tua app stessa è suddivisa in più librerie), Xamarin.Forms potrebbe non essere in grado di caricare oggetti da tali assembly (ad esempio renderer personalizzati).

Questo problema può verificarsi quando si usa la catena di strumenti Compila con .NET Native, che è un'opzione per le app UWP nella finestra Proprietà > Compila > generale per il progetto.

Puoi risolvere questo problema usando un overload specifico della piattaforma UWP della Forms.Init chiamata in App.xaml.cs come illustrato nel codice seguente (devi sostituire ClassInOtherAssembly con una classe effettiva i riferimenti al codice):

// You'll need to add `using System.Reflection;`
List<Assembly> assembliesToInclude = new List<Assembly>();

// Now, add in all the assemblies your app uses
assembliesToInclude.Add(typeof (ClassInOtherAssembly).GetTypeInfo().Assembly);

// Also do this for all your other 3rd party libraries
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
// replaces Xamarin.Forms.Forms.Init(e);

Aggiungere una voce per ogni assembly aggiunto come riferimento nella Esplora soluzioni, tramite un riferimento diretto o un Oggetto NuGet.

Servizi di dipendenza e compilazione .NET Native

Le build di rilascio che usano la compilazione .NET Native non possono risolvere i servizi di dipendenza definiti all'esterno dell'eseguibile principale dell'app, ad esempio in un progetto o una libreria separati.

Usare il DependencyService.Register<T>() metodo per registrare manualmente le classi del servizio di dipendenza. In base all'esempio precedente, aggiungere il metodo register come segue:

Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this