Configurer des projets Windows

Ajout de nouveaux projets Windows à une solution existante Xamarin.Forms

Les solutions plus anciennes Xamarin.Forms (ou celles créées sur macOS) n’auront pas de projets d’application plateforme Windows universelle (UWP). Par conséquent, vous devez ajouter manuellement un projet UWP pour créer une application Windows 10 (UWP).

Ajouter une application plateforme Windows universelle

Visual Studio 2019 sur Windows 10 est recommandé pour créer des applications UWP. Pour plus d’informations sur le plateforme Windows universelle, consultez Introduction au plateforme Windows universelle.

UWP est disponible dans Xamarin.Forms les versions 2.1 et ultérieures, et Xamarin.Forms. Les cartes sont prises en charge dans Xamarin.Forms les versions 2.2 et ultérieures.

Consultez la section résolution des problèmes pour obtenir des conseils utiles.

Suivez ces instructions pour ajouter une application UWP qui s’exécutera sur Windows 10 téléphones, tablettes et ordinateurs de bureau :

1 . Cliquez avec le bouton droit sur la solution, sélectionnez Ajouter un > nouveau projet... et ajoutez un projet d’application vide (Windows universel) :

Boîte de dialogue Ajouter un nouveau projet

2 . Dans la boîte de dialogue Nouveau projet plateforme Windows universelle, sélectionnez les versions minimale et cible de Windows 10 sur laquelle l’application s’exécutera :

Boîte de dialogue Nouveau projet plateforme Windows universelle

3 . Cliquez avec le bouton droit sur le projet UWP, sélectionnez Gérer les packages NuGet... et ajoutez le Xamarin.Forms package. Vérifiez que les autres projets de la solution sont également mis à jour vers la même version du Xamarin.Forms package.

4 . Assurez-vous que le nouveau projet UWP sera généré dans la fenêtre Build > Configuration Manager (cela ne s’est probablement pas produit par défaut). Cochez les cases Générer et Déployer pour le projet universel :

Configuration Manager fenêtre

5. Cliquez avec le bouton droit sur le projet, sélectionnez Ajouter une > référence et créez une référence au Xamarin.Forms projet d’application (projet.NET Standard ou partagé).

Boîte de dialogue Gestionnaire de références

6 . Dans le projet UWP, modifiez App.xaml.cs pour inclure l’appel Init de méthode à l’intérieur de la méthode autour de la OnLaunched ligne 52 :

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

7 . Dans le projet UWP, modifiez MainPage.xaml en supprimant le Grid contenu dans l’élément Page .

8 . Dans MainPage.xaml, ajoutez une nouvelle xmlns entrée pour Xamarin.Forms.Platform.UWP:

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

9 . Dans MainPage.xaml, remplacez l’élément racine <Page par <forms:WindowsPage:

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

10 . Dans le projet UWP, modifiez MainPage.xaml.cs pour supprimer le : Page spécificateur d’héritage pour le nom de classe (car il héritera désormais de en raison de WindowsPage la modification apportée à l’étape précédente) :

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

11 . Dans MainPage.xaml.cs, ajoutez l’appel LoadApplication dans le MainPage constructeur pour démarrer l’application Xamarin.Forms :

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

Notes

L’argument de la LoadApplication méthode est le Xamarin.Forms.Application instance défini dans votre projet .NET Standard.

12 . Ajoutez toutes les ressources locales (par exemple, des fichiers image) à partir des projets de plateforme existants requis.

Dépannage

« Exception d’appel cible » lors de l’utilisation de « Compiler avec .NET Native chaîne d’outils »

Si votre application UWP référence plusieurs assemblys (par exemple, des bibliothèques de contrôle tierces, ou si votre application elle-même est divisée en plusieurs bibliothèques), Xamarin.Forms il se peut qu’elle ne puisse pas charger des objets à partir de ces assemblys (tels que des convertisseurs personnalisés).

Cela peut se produire lors de l’utilisation de la chaîne d’outils Compiler avec .NET Native qui est une option pour les applications UWP dans la fenêtre Propriétés > Générer > général pour le projet.

Vous pouvez résoudre ce problème à l’aide d’une surcharge spécifique à UWP de l’appel Forms.Init dans App.xaml.cs , comme indiqué dans le code ci-dessous (vous devez remplacer ClassInOtherAssembly par une classe réelle que votre code référence) :

// 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);

Ajoutez une entrée pour chaque assembly que vous avez ajouté en tant que référence dans le Explorateur de solutions, via une référence directe ou un Objet NuGet.

Dependency Services et compilation .NET Native

Les builds release utilisant .NET Native compilation peuvent ne pas résoudre les services de dépendance définis en dehors de l’exécutable de l’application main (par exemple, dans un projet ou une bibliothèque distinct).

Utilisez la DependencyService.Register<T>() méthode pour inscrire manuellement des classes de service de dépendance. En fonction de l’exemple ci-dessus, ajoutez la méthode register comme suit :

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