Wechseln von einer Desktopanwendung zu UWP
Wenn Sie über eine vorhandene Desktopanwendung verfügen, die mit .NET Framework (einschließlich WPF und Windows Forms) oder C++ Win32-APIs erstellt wurde, haben Sie mehrere Optionen für den Wechsel zu den Universelle Windows-Plattform (UWP) und Windows 10/11.
Verpacken Der Desktopanwendung in einem MSIX-Paket
Sie können Ihre Desktopanwendung in einem MSIX-Paket verpacken, um Zugriff auf viele weitere Windows 10- und Windows 11-Features zu erhalten. MSIX ist ein modernes Windows-App-Paketformat, bei dem eine universelle Verpackungsoberfläche für alle Windows-Apps bereitgestellt wird, z. B. UWP-, WPF-, Windows Forms- und Win32-Apps. Durch das Verpacken Ihrer Windows-Desktop-Apps in MSIX-Paketen erhalten Sie Zugriff auf eine stabile Installations- und Aktualisierungsoberfläche, ein verwaltetes Sicherheitsmodell mit einem flexiblen Funktionssystem, Support für den Microsoft Store, Unternehmensverwaltung und viele benutzerdefinierte Distributionsmodelle. Sie können Ihre Anwendung verpacken, unabhängig davon, ob Sie über den Quellcode verfügen oder nur über eine vorhandene Installationsdatei (z. B. ein MSI- oder App-V-Installationsprogramm) verfügen. Nachdem Sie Ihre Anwendung verpackt haben, können Sie UWP-Features wie Paketerweiterungen und andere UWP-Komponenten integrieren.
Weitere Informationen finden Sie unter Erstellen eines MSIX-Pakets aus Code und Features, die paketidentität erfordern.
Verwenden von Windows-Runtime-APIs
Sie können viele Windows-Runtime-APIs direkt in Ihrer WPF-, Windows Forms- oder C++-Win32-Desktop-App aufrufen, um moderne Benutzeroberflächen für Windows 10-Benutzer zu integrieren. Sie können beispielsweise Windows-Runtime-APIs aufrufen, um Ihrer Desktop-App Popupbenachrichtigungen hinzuzufügen.
Weitere Informationen finden Sie unter Verwenden von Windows-Runtime-APIs in Desktop-Apps.
Migrieren einer .NET Framework-App zu einer UWP-App
Wenn Ihre Anwendung im .NET Framework ausgeführt wird, können Sie sie mithilfe von .NET Standard 2.0 zu einer UWP-App migrieren. Verschieben Sie so viel Code wie möglich in .NET Standard 2.0-Klassenbibliotheken, und erstellen Sie dann eine UWP-App, die auf Ihre .NET Standard 2.0-Bibliotheken verweist.
Freigeben von Code in einer .NET Standard 2.0-Bibliothek
Wenn Ihre Anwendung auf .NET Framework ausgeführt wird, platzieren Sie so viel Code wie möglich in .NET Standard 2.0-Klassenbibliotheken. Solange Ihr Code APIs verwendet, die im Standard definiert sind, können Sie sie in einer UWP-App wiederverwenden. Es ist einfacher, Code in einer .NET Standard-Bibliothek freizugeben, da so viele weitere APIs in .NET Standard 2.0 enthalten sind.
Hier ist ein Video, in dem Sie mehr darüber erfahren.
Hinzufügen von .NET Standardbibliotheken
Fügen Sie ihrer Lösung zunächst eine oder mehrere .NET Standard-Klassenbibliotheken hinzu.
Die Anzahl der Bibliotheken, die Sie Ihrer Lösung hinzufügen, hängt davon ab, wie Sie Ihren Code organisieren möchten.
Stellen Sie sicher, dass jede Klassenbibliothek auf .NET Standard 2.0 ausgerichtet ist.
Diese Einstellung finden Sie auf den Eigenschaftenseiten des Klassenbibliotheksprojekts.
Fügen Sie in Ihrem Desktopanwendungsprojekt einen Verweis auf das Klassenbibliotheksprojekt hinzu.
Verwenden Sie als Nächstes Tools, um zu bestimmen, wie viel Code dem Standard entspricht. Auf diese Weise können Sie vor dem Verschieben von Code in die Bibliothek entscheiden, welche Teile Sie wiederverwenden können, welche Teile nur minimal geändert werden müssen und welche Teile anwendungsspezifisch bleiben.
Überprüfen der Bibliotheks- und Codekompatibilität
Wir beginnen mit Nuget Packages und anderen DLL-Dateien, die Sie von einem Drittanbieter erhalten haben.
Wenn Ihre Anwendung eine dieser Anwendungen verwendet, ermitteln Sie, ob sie mit .NET Standard 2.0 kompatibel sind. Dazu können Sie eine Visual Studio-Erweiterung oder ein Befehlszeilenprogramm verwenden.
Verwenden Sie diese Tools, um Ihren Code zu analysieren. Laden Sie die Tools hier (dotnet-apiport) herunter, und schauen Sie sich dieses Video an, um zu erfahren, wie Sie sie verwenden können.
Wenn Ihr Code nicht mit dem Standard kompatibel ist, sollten Sie andere Möglichkeiten in Betracht ziehen, wie Sie diesen Code implementieren könnten. Öffnen Sie zunächst den .NET-API-Browser. Sie können diesen Browser verwenden, um die API zu überprüfen, die in .NET Standard 2.0 verfügbar sind. Stellen Sie sicher, dass Sie den Bereich der Liste auf .NET Standard 2.0 festlegen.
Einige Ihres Codes sind plattformspezifisch und müssen in Ihrem Desktopanwendungsprojekt verbleiben.
Beispiel: Migrieren von Datenzugriffscode zu einer .NET Standard 2.0-Bibliothek
Nehmen wir an, dass wir über eine sehr einfache Windows Forms-Anwendung verfügen, die Kunden aus unserer Northwind-Beispieldatenbank anzeigt.
Das Projekt enthält eine .NET Standard 2.0-Klassenbibliothek mit einer statischen Klasse namens Northwind. Wenn wir diesen Code in die Northwind-Klasse verschieben, wird er nicht kompiliert, da er die SQLConnection
SqlCommand
SqlDataReader
Klassen und Klassen verwendet, die in .NET Standard 2.0 nicht verfügbar sind.
public static ArrayList GetCustomerNames()
{
ArrayList customers = new ArrayList();
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = ...; // Your connection string goes here.
conn.Open();
SqlCommand command = new SqlCommand("select ContactName from customers order by ContactName asc", conn);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
customers.Add(reader[0]);
}
}
}
return customers;
}
Wir können jedoch den .NET-API-Browser verwenden, um eine Alternative zu finden. Die DbConnection
Klassen DbCommand
und DbDataReader
Klassen sind alle in .NET Standard 2.0 verfügbar, damit wir sie stattdessen verwenden können.
Diese überarbeitete Version verwendet diese Klassen, um eine Liste von Kunden abzurufen, aber zum Erstellen einer DbConnection
Klasse müssen wir ein Factoryobjekt übergeben, das wir in der Clientanwendung erstellen.
public static ArrayList GetCustomerNames(DbProviderFactory factory)
{
ArrayList customers = new ArrayList();
using (DbConnection conn = factory.CreateConnection())
{
conn.ConnectionString = ...; // Your connection string goes here.
conn.Open();
DbCommand command = factory.CreateCommand();
command.Connection = conn;
command.CommandText = "select ContactName from customers order by ContactName asc";
using (DbDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
customers.Add(reader[0]);
}
}
}
return customers;
}
Auf der CodeBehind-Seite von Windows Form können wir einfach eine Factoryinstanz erstellen und an unsere Methode übergeben.
public partial class Customers : Form
{
public Customers()
{
InitializeComponent();
dataGridView1.Rows.Clear();
SqlClientFactory factory = SqlClientFactory.Instance;
foreach (string customer in Northwind.GetCustomerNames(factory))
{
dataGridView1.Rows.Add(customer);
}
}
}
Erstellen einer UWP-App
Jetzt können Sie Ihrer Lösung eine UWP-App hinzufügen.
Sie müssen weiterhin UI-Seiten in XAML entwerfen und jeden geräte- oder plattformspezifischen Code schreiben, aber wenn Sie fertig sind, können Sie die gesamte Breite von Windows 10- und Windows 11-Geräten erreichen, und Ihre App-Seiten haben ein modernes Gefühl, das sich gut an verschiedene Bildschirmgrößen und Auflösungen anpasst.
Ihre App reagiert auf andere Eingabemechanismen als nur eine Tastatur und Maus, und Features und Einstellungen sind auf allen Geräten intuitiv. Dies bedeutet, dass Benutzer lernen, die Dinge einmal zu erledigen, und dann funktioniert es ganz vertraut, unabhängig vom Gerät.
Dies sind nur einige der Goodies, die mit UWP kommen. Weitere Informationen finden Sie unter Erstellen großartiger Erfahrungen mit Windows.
Hinzufügen eines UWP-Projekts
Fügen Sie ihrer Lösung zunächst ein UWP-Projekt hinzu.
Fügen Sie dann aus Ihrem UWP-Projekt einen Verweis auf das .NET Standard 2.0-Bibliotheksprojekt hinzu.
Erstellen Ihrer Seiten
Fügen Sie XAML-Seiten hinzu, und rufen Sie den Code in Ihrer .NET Standard 2.0-Bibliothek auf.
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel x:Name="customerStackPanel">
<ListView x:Name="customerList"/>
</StackPanel>
</Grid>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
SqlClientFactory factory = SqlClientFactory.Instance;
customerList.ItemsSource = Northwind.GetCustomerNames(factory);
}
}
Informationen zu den ersten Schritten mit UWP finden Sie unter What's a UWP app.
Erreichen von iOS- und Android-Geräten
Sie können Android- und iOS-Geräte erreichen, indem Sie Xamarin-Projekte hinzufügen.
Hinweis
Für neue plattformübergreifende Projekte sollten Sie .NET MAUI verwenden.
Mit diesen Projekten können Sie C# verwenden, um Android- und iOS-Apps mit vollständigem Zugriff auf plattformspezifische und gerätespezifische APIs zu erstellen. Diese Apps nutzen plattformspezifische Hardwarebeschleunigung und werden für die systemeigene Leistung kompiliert.
Sie haben Zugriff auf das gesamte Spektrum an Funktionen, die von der zugrunde liegenden Plattform und dem Gerät verfügbar gemacht werden, einschließlich plattformspezifischer Funktionen wie iBeacons und Android Fragments, und Sie verwenden standardmäßige systemeigene Benutzeroberflächensteuerelemente, um UIs zu erstellen, die aussehen und verhalten, wie Benutzer sie erwarten.
Genau wie UWPs ist die Kosten zum Hinzufügen einer Android- oder iOS-App niedriger, da Sie Geschäftslogik in einer .NET Standard 2.0-Klassenbibliothek wiederverwenden können. Sie müssen Ihre UI-Seiten in XAML entwerfen und geräte- oder plattformspezifischen Code schreiben.
Hinzufügen eines Xamarin-Projekts
Fügen Sie zunächst Ihrer Lösung ein Android-, iOS- oder plattformübergreifendes Projekt hinzu.
Sie finden diese Vorlagen im Dialogfeld "Neues Projekt hinzufügen" in der Gruppe "Visual C# ".
Hinweis
Plattformübergreifende Projekte eignen sich hervorragend für Apps mit wenig plattformspezifischer Funktionalität. Sie können sie verwenden, um eine systemeigene XAML-basierte Benutzeroberfläche zu erstellen, die unter iOS, Android und Windows ausgeführt wird. Hiererhalten Sie weitere Informationen.
Fügen Sie dann aus Ihrem Android-, iOS- oder plattformübergreifenden Projekt einen Verweis auf das Klassenbibliotheksprojekt hinzu.
Erstellen Ihrer Seiten
Unser Beispiel zeigt eine Liste von Kunden in einer Android-App.
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp" android:textSize="16sp"
android:id="@android:id/list">
</TextView>
[Activity(Label = "MyAndroidApp", MainLauncher = true)]
public class MainActivity : ListActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SqlClientFactory factory = SqlClientFactory.Instance;
var customers = (string[])Northwind.GetCustomerNames(factory).ToArray(typeof(string));
ListAdapter = new ArrayAdapter<string>(this, Resource.Layout.list_item, customers);
}
}
Informationen zu den ersten Schritten mit Android-, iOS- und plattformübergreifenden Projekten finden Sie im Xamarin-Entwicklerportal.
Nächste Schritte
Antworten auf deine Fragen
Haben Sie Fragen? Frage uns auf Stack Overflow. Unser Team überwacht diese Tags. Du kannst uns auch hier fragen.