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:
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:
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:
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).
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.UWP
hinzu:
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