Einrichten von Windows-Projekten

Hinzufügen neuer Windows-Projekte zu einer vorhandenen Xamarin.Forms Projektmappe

Ältere Xamarin.Forms Projektmappen (oder solche, die unter macOS erstellt wurden) verfügen nicht über Universelle Windows-Plattform-App-Projekte (UWP). Daher müssen Sie manuell ein UWP-Projekt hinzufügen, um eine Windows 10-App (UWP) zu erstellen.

Hinzufügen einer Universelle Windows-Plattform-App

Visual Studio 2019 unter Windows 10 wird zum Erstellen von UWP-Apps empfohlen. Weitere Informationen zum Universelle Windows-Plattform finden Sie unter Einführung in die Universelle Windows-Plattform.

UWP ist in Xamarin.Forms Version 2.1 und höher Xamarin.Formsund verfügbar. Karten werden in Xamarin.Forms Version 2.2 und höher unterstützt.

Im Abschnitt zur Problembehandlung finden Sie hilfreiche Tipps.

Befolgen Sie diese Anweisungen, um eine UWP-App hinzuzufügen, die auf Windows 10 Smartphones, Tablets und Desktops ausgeführt wird:

1. Klicken Sie mit der rechten Maustaste auf die Projektmappe, wählen Sie Neues Projekt hinzufügen > ... aus, und fügen Sie ein Leeres App-Projekt (Universelles Windows) -Projekt hinzu:

Dialogfeld „Neues Projekt hinzufügen“

2 . Wählen Sie im Dialogfeld Neues Universelle Windows-Plattform Projekt die Mindest- und Zielversionen von Windows 10 aus, unter denen die App ausgeführt wird:

Dialogfeld

3 . Klicken Sie mit der rechten Maustaste auf das UWP-Projekt, wählen Sie NuGet-Pakete verwalten... aus, und fügen Sie das Xamarin.Forms Paket hinzu. Stellen Sie sicher, dass auch die anderen Projekte in der Projektmappe auf die gleiche Version des Xamarin.Forms Pakets aktualisiert werden.

4 . Stellen Sie sicher, dass das neue UWP-Projekt im Fenster Build > Configuration Manager erstellt wird (dies ist wahrscheinlich nicht standardmäßig geschehen). Aktivieren Sie die Felder Erstellen und Bereitstellen für das Universelle Projekt:

Configuration Manager Fenster

5. Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie Verweis hinzufügen > aus, und erstellen Sie einen Verweis auf das Xamarin.Forms Anwendungsprojekt (.NET Standard oder Freigegebenes Projekt).

Verweis-Manager (Dialogfeld)

6 . Bearbeiten Sie im UWP-Projekt App.xaml.cs , um den Init Methodenaufruf in die OnLaunched -Methode um Zeile 52 einzuschließen:

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

7 . Bearbeiten Sie im UWP-Projekt MainPage.xaml , indem Sie die Grid im Page Element enthaltene entfernen.

8 . Fügen Sie in MainPage.xaml einen neuen xmlns Eintrag für Xamarin.Forms.Platform.UWPhinzu:

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

9 . Ändern Sie in MainPage.xaml das Stammelement <Page in <forms:WindowsPage:

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

10 . Bearbeiten Sie im UWP-Projekt MainPage.xaml.cs , um den : Page Vererbungsspezifizierer für den Klassennamen zu entfernen (da er nun aufgrund der im vorherigen Schritt vorgenommenen Änderung von WindowsPage erbt):

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

11 . Fügen Sie in MainPage.xaml.cs den LoadApplication Aufruf im MainPage Konstruktor hinzu, um die Xamarin.Forms App zu starten:

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

Hinweis

Das Argument für die LoadApplication -Methode ist das Xamarin.Forms.Application in Ihrem .NET-Standardprojekt definierte instance.

12 . Fügen Sie alle lokalen Ressourcen (z. B. Imagedateien) aus den vorhandenen Plattformprojekten hinzu, die erforderlich sind.

Problembehandlung

"Zielaufruf-Ausnahme" bei Verwendung von "Kompilieren mit .NET Native Toolchain"

Wenn Ihre UWP-App auf mehrere Assemblys verweist (z. B. Steuerelementbibliotheken von Drittanbietern oder Ihre App selbst in mehrere Bibliotheken aufgeteilt ist), Xamarin.Forms können möglicherweise keine Objekte aus diesen Assemblys (z. B. benutzerdefinierte Renderer) geladen werden.

Dies kann auftreten, wenn Sie die Toolkette Kompilieren mit .NET Native verwenden, die eine Option für UWP-Apps im Fenster Eigenschaftenbuild >> Allgemein für das Projekt ist.

Sie können dies beheben, indem Sie eine UWP-spezifische Überladung des Forms.Init Aufrufs in App.xaml.cs verwenden, wie im folgenden Code gezeigt (Sie sollten durch eine tatsächliche Klasse ersetzen ClassInOtherAssembly , auf die Ihr Code verweist):

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

Fügen Sie einen Eintrag für jede Assembly hinzu, die Sie als Verweis im Projektmappen-Explorer hinzugefügt haben, entweder über einen direkten Verweis oder ein NuGet.

Kompilierung von Abhängigkeitsdiensten und .NET Native

Releasebuilds, die .NET Native Kompilierung verwenden, können Abhängigkeitsdienste nicht auflösen, die außerhalb der ausführbaren Standard-App definiert sind (z. B. in einem separaten Projekt oder einer separaten Bibliothek).

Verwenden Sie die DependencyService.Register<T>() -Methode, um Abhängigkeitsdienstklassen manuell zu registrieren. Fügen Sie basierend auf dem obigen Beispiel die Registermethode wie folgt hinzu:

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