Verschieben von einer Desktopanwendung für UWPMove from a desktop application to UWP

Wenn Sie eine vorhandene desktop-Anwendung verfügen, die mithilfe von .NET Framework (einschließlich WPF und Windows Forms) erstellt wurde oder C++ Win32-APIs, gibt es mehrere Möglichkeiten zum Verschieben in die universelle Windows-Plattform (UWP) und Windows 10.If you have an existing desktop application that was built using the .NET Framework (including WPF and Windows Forms) or C++ Win32 APIs, you have several options for moving to the Universal Windows Platform (UWP) and Windows 10.

Packen Sie die desktop-Anwendung in einem Paket MSIXPackage your desktop application in an MSIX package

Sie können die desktop-Anwendung in einem Paket MSIX für den Zugriff auf viele weitere Features von Windows 10 verpacken.You can package your desktop application in an MSIX package to get access to many more Windows 10 features. 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.MSIX is a modern Windows app package format that provides a universal packaging experience for all Windows apps, including UWP, WPF, Windows Forms and 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.Packaging your desktop Windows apps in MSIX packages gets you access to a robust installation and updating experience, a managed security model with a flexible capability system, support for the Microsoft Store, enterprise management, and many custom distribution models. Sie können die Anwendung, ob Sie den Quellcode haben oder wenn nur eine vorhandene Installationsdatei (z. B. eine MSI- oder App-V-Installer) verpacken.You can package your application whether you have the source code or if you only have an existing installer file (such as an MSI or App-V installer). Nachdem Sie Ihre Anwendung gepackt haben, können Sie die UWP-Features wie z. B. Paket Extensions und andere UWP-Komponenten integrieren.After you package your application, you can integrate UWP features such as package extensions and other UWP components.

Weitere Informationen finden Sie unter Packen von desktop-Anwendungen (Desktop-Brücke) und Features, die Paketidentität erfordern.For more information, see Package desktop applications (Desktop Bridge) and Features that require package identity.

Verwenden von UWP-APIsUse UWP APIs

Sie können viele UWP-APIs direkt in Ihrer WPF-, Windows Forms- oder C++-Win32-Desktop-App aufrufen, um moderne Benutzeroberflächen für Windows 10-Benutzer zu integrieren.You can call many UWP APIs directly in your WPF, Windows Forms, or C++ Win32 desktop app to integrate modern experiences that light up for Windows 10 users. Sie können beispielsweise UWP-APIs aufrufen, um Ihrer Desktop-App Popupbenachrichtigungen hinzuzufügen.For example, you can call UWP APIs to add toast notifications to your desktop app.

Weitere Informationen finden Sie unter Use UWP APIs in desktop apps (Verwenden von UWP-APIs in Desktop-Apps).For more information, see Use UWP APIs in desktop apps.

Migrieren von .NET Framework-app in einer UWP-appMigrate a .NET Framework app to a UWP app

Wenn Ihre Anwendung auf .NET Framework ausgeführt wird, können Sie es zu einer UWP-app migrieren, durch die Nutzung von .NET Standard 2.0.If your application runs on the .NET Framework, you can migrate it to a UWP app by leveraging .NET Standard 2.0. Verschieben Sie soviel Code wie möglich in .NET Standard 2.0-Klassenbibliotheken, und klicken Sie dann erstellen Sie eine UWP-app, die von .NET Standard 2.0-Bibliotheken verweist.Move as much code as you can into .NET Standard 2.0 class libraries, and then create a UWP app that references your .NET Standard 2.0 libraries.

Teilen von Code in Bibliotheken für .NET Standard 2.0Share code in a .NET Standard 2.0 library

Wenn Ihre Anwendung auf .NET Framework ausgeführt wird, platzieren Sie möglichst viel Code, wie Sie Bibliotheken in .NET Standard 2.0 Klasse können.If your application runs on the .NET Framework, place as much code as you can into .NET Standard 2.0 class libraries. Solange Ihr Code-APIs verwendet, die standardmäßig definiert sind, können Sie diesen in einer UWP-App wiederverwenden.As long as your code uses APIs that are defined in the standard, you can reuse it in a UWP app. Es ist einfacher denn je, Code in den Bibliotheken für .NET Standard zu teilen, da viele andere APIs in .NET Standard 2.0 enthalten sind.It's easier than it's ever been to share code in a .NET Standard library because so many more APIs are included in the .NET Standard 2.0.

Hier ist ein Video, das Sie mehr darüber informiert.Here's a video that tells you more about it.

Hinzufügen von Bibliotheken für .NET StandardAdd .NET Standard libraries

Fügen Sie der Lösung zunächst eine oder mehrere Klassenbibliotheken für .NET Standard 2.0 hinzu.First, add one or more .NET Standard class libraries to your solution.

Hinzufügen eines Dotnet-Standardprojekts

Die Anzahl der Bibliotheken, die Sie der Lösung hinzufügen, hängt davon ab, wie Sie Ihren Code organisieren möchten.The number of libraries that you add to your solution depends on how you plan to organize your code.

Stellen Sie sicher, dass jede Klassenbibliothek auf .NET Standard 2.0 abzielt.Make sure that each class library targets the .NET Standard 2.0.

Festlegen von .NET Standard 2.0 als Ziel

Sie finden diese Einstellung auf den Eigenschaftenseiten des Klassenbibliotheksprojekts.You can find this setting in the property pages of the class library project.

Fügen Sie dem Desktopanwendungsprojekt einfach einen Verweis auf das Klassenbibliotheksprojekt hinzu.From your desktop application project, add a reference to the class library project.

Verweis auf die Klassenbibliothek

Sie können anschließend mit den Tools bestimmen, welcher Teil des Codes dem Standard entspricht.Next, use tools to determine how much of your code conforms to the standard. Auf diese Weise können Sie vor dem Verschieben des Code in die Bibliothek entscheiden, welche Teile Sie wiederverwenden können, welche Teile minimal geändert werden müssen und welche Teile anwendungsspezifisch bleiben.That way, before you move code into the library, you can decide which parts you can reuse, which parts require minimal modification, and which parts will remain application-specific.

Überprüfen der Kompatibilität für die Bibliothek und den CodeCheck library and code compatibility

Wir beginnen mit NuGet-Paketen und anderen DLL-Dateien, die Sie von einem Drittanbieter erhalten haben.We'll start with Nuget Packages and other dll files that you obtained from a third party.

Wenn Ihre Anwendung diese verwendet, bestimmen Sie, ob sie mit .NET Standard 2.0 kompatibel sind.If your application uses any of them, determine if they are compatible with the .NET Standard 2.0. Sie können dazu eine Visual Studio-Erweiterung oder ein Befehlszeilendienstprogramm verwenden.You can use a Visual Studio extension or a command-line utility to do that.

Verwenden Sie die gleichen Tools, um Ihren Code zu analysieren.Use these same tools to analyze your code. Laden Sie die Tools hier herunter (dotnet-apiport). Schauen Sie sich dieses Video an, um zu erfahren, wie Sie diese verwenden können.Download the tools here (dotnet-apiport) and then watch this video to learn how to use them.   

Wenn Ihr Code nicht mit dem Standard kompatibel ist, ziehen Sie weitere Möglichkeiten in Betracht, um diesen Code zu implementieren.If your code isn't compatible with the standard, consider other ways that you could implement that code. Öffnen Sie dazu den .NET API-Browser.Start by opening the .NET API Browser. Sie können diesen Browsers verwenden, um die APIs zu überprüfen, die in .NET Standard 2.0 verfügbar sind.You can use that browser to review the API's that are available in the .NET Standard 2.0. Beschränken Sie die Liste unbedingt auf den .NET Standard 2.0.Make sure to scope the list to the .NET Standard 2.0.

Dot-Net-Option

Ein Teil Ihres Codes ist plattformspezifisch und muss in Ihrem Desktopanwendungsprojekt verbleiben.Some of your code will be platform-specific and will need to remain in your desktop application project.

Beispiel: Migrieren von Datenzugriffscode in einer .NET Standard 2.0-BibliothekExample: Migrating data access code to a .NET Standard 2.0 library

Nehmen wir an, dass wir eine sehr einfache Windows Forms-Anwendung verfügen, die Kunden unsere Northwind-Beispieldatenbank anzeigt.Let's assume that we have a very basic Windows Forms application that shows customers from our Northwind sample database.

Windows Forms-App

Das Projekt enthält eine Klassenbibliothek für .NET Standard 2.0 mit einer statischen Klasse namens Northwind.The project contains a .NET Standard 2.0 class library with a static class named Northwind. Wenn wir diesen Code in die Northwind-Klasse verschieben, wird er nicht kompiliert, da er die Klassen SQLConnection, SqlCommand und SqlDataReader verwendet und diese Klassen in .NET Standard 2.0 nicht verfügbar sind.If we move this code into the Northwind class, it won't compile because it uses the SQLConnection, SqlCommand, and SqlDataReader classes, and those classes that are not available in the .NET Standard 2.0.

public static ArrayList GetCustomerNames()
{
    ArrayList customers = new ArrayList();

    using (SqlConnection conn = new SqlConnection())
    {
        conn.ConnectionString =
            @"Data Source=" +
            @"<Your Server Name>\SQLEXPRESS;Initial Catalog=NORTHWIND;Integrated Security=SSPI";

        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.We can use the .NET API Browser to find an alternative though. Die Klassen DbConnection, DbCommand, und DbDataReader sind alle in .NET Standard 2.0 verfügbar, sodass wir diese stattdessen verwenden können.The DbConnection, DbCommand, and DbDataReader classes are all available in the .NET Standard 2.0 so we can use them instead.

Die überarbeitete Version verwendet diese Klassen, um eine Liste der Kunden zu erhalten. Zum Erstellen einer DbConnection-Klasse müssen wir allerdings ein Factoryobjekt übergeben, das wir in der Clientanwendung erstellen.This revised version uses those classes to get a list of customers, but to create a DbConnection class, we'll need to pass in a factory object that we create in the client application.

public static ArrayList GetCustomerNames(DbProviderFactory factory)
{
    ArrayList customers = new ArrayList();

    using (DbConnection conn = factory.CreateConnection())
    {
        conn.ConnectionString = @"Data Source=" +
                        @"<Your Server Name>\SQLEXPRESS;Initial Catalog=NORTHWIND;Integrated Security=SSPI";

        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;
}

In der CodeBehind-Seite von Windows Form können wir einfach eine Factoryinstanz erstellen und Sie diese an unsere Methode übergeben.In the code-behind page of the Windows Form, we can just create factory instance and pass it into our method.

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-appCreate a UWP app

Jetzt können Sie der Lösung eine UWP-App hinzuzufügen.Now you're ready to add a UWP app to your solution.

Abbildung der Desktop-zu-UWP-Brücke

Sie müssen allerdings noch die Seiten der Benutzeroberfläche in XAML erstellen und den für jedes Gerät oder jede Plattform spezifischen Code schreiben. Wenn Sie damit fertig sind, können Sie den gesamten Umfang der Windows 10-Geräte erreichen und Ihre App-Seiten werden modern dargestellt und eignen sich so gut für unterschiedliche Bildschirmgrößen und -Auflösungen.You'll still have to design UI pages in XAML and write any device or platform-specific code, but when you are done, you'll be able to reach the full breadth of Windows 10 devices and your app pages will have a modern feel that adapts well to different screen sizes and resolutions.

Ihre App reagiert auf andere Eingabemechanismen als nur Tastatur und Maus, und die Funktionen und Einstellungen sind auf allen Geräten intuitiv.Your app will respond to input mechanisms other than just a keyboard and mouse, and features and settings will be intuitive across devices. Dies bedeutet, dass Benutzer lernen, Aufgaben nur einmal durchzuführen. Dies funktioniert in vertrauter Art und Weise und ist vom Gerät unabhängig.This means that users learn how to do things one time, and then it works in a very familiar way no matter the device.

Dies sind nur einige Beispiele für die interessanten Funktionen, die in der UWP enthalten sind.These are just a few of the goodies that come with UWP. Weitere Informationen finden Sie unter Erstellen Sie mit Windows herausragende Umgebungen.To learn more, see Build great experiences with Windows.

Hinzufügen eines UWP-ProjektsAdd a UWP project

Fügen Sie Ihrer Lösung zunächst ein UWP-Projekt hinzu.First, add a UWP project to your solution.

UWP-Projekt

Fügen Sie dann vom UWP-Projekt einen Verweis auf das Projekt der Bibliothek für .NET Standard 2.0 hinzu.Then, from your UWP project, add a reference the .NET Standard 2.0 library project.

Verweis auf die Klassenbibliothek

Erstellen der SeitenBuild your pages

Fügen Sie XAML-Seiten hinzu, und rufen Sie den Code in der Bibliothek für .NET Standard 2.0 auf.Add XAML pages and call the code in your .NET Standard 2.0 library.

UWP-App

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

Erste Schritte mit UWP finden Sie unter Was ist eine UWP-App.To get started with UWP, see What's a UWP app.

Erreichen von iOS- und Android-GerätenReach iOS and Android devices

Durch das Hinzufügen von Xamarin-Projekten können Sie Android und iOS-Geräten erreichen.You can reach Android and iOS devices by adding Xamarin projects.

Xamarin-Apps

Diese Projekte ermöglichen die Verwendung von C# zur Entwicklung von Android- und iOS-Apps mit Vollzugriff auf plattformspezifische und gerätespezifische APIs.These projects let you use C# to build Android and iOS apps with full access to platform-specific and device-specific APIs. Diese Apps nutzen die plattformspezifische Hardwarebeschleunigung und wurden für die native Leistung kompiliert.These apps leverage platform-specific hardware acceleration, and are compiled for native performance.

Sie haben Zugriff auf das gesamte Spektrum der Funktionen, die von der zugrunde liegenden Plattform und dem Gerät verfügbar gemacht wurden, einschließlich der Plattformfunktionen wie iBeacons und Android Fragments. Sie verwenden standardmäßig native Steuerelemente der Benutzeroberfläche, um Benutzeroberflächen zu erstellen, die dem gewünschten Erscheinungsbild der Benutzer entsprechen.They have access to the full spectrum of functionality exposed by the underlying platform and device, including platform-specific capabilities like iBeacons and Android Fragments and you'll use standard native user interface controls to build UIs that look and feel the way that users expect them to.

Genau wie bei UWPs sind die Kosten für das Hinzufügen einer Android- oder iOS-App niedriger, da Sie die Geschäftslogik in einer Klassenbibliothek für .NET Standard 2.0 wiederverwenden können.Just like UWPs, the cost to add an Android or iOS app is lower because you can reuse business logic in a .NET Standard 2.0 class library. Sie müssen allerdings noch die Seiten der Benutzeroberfläche in XAML erstellen und den für jedes Gerät oder jede Plattform spezifischen Code schreiben.You'll have to design your UI pages in XAML and write any device or platform-specific code.

Hinzufügen eines Xamarin-ProjektsAdd a Xamarin project

Fügen Sie zuerst der Lösung ein Android-, iOS- oder plattformübergreifendes hinzu.First, add an Android, iOS, or Cross-Platform project to your solution.

Sie finden diese Vorlagen im Dialogfeld Neues Projekt hinzufügen in der Visual C#- -Gruppe.You can find these templates in the Add New Project dialog box under the Visual C# group.

Xamarin-Apps

Hinweis

Plattformübergreifende Projekte sind ideal für Apps mit wenigen plattformspezifischen Funktionen.Cross-platform projects are great for apps with little platform-specific functionality. Sie können diese zur Entwicklung einer nativen XAML-basierten Benutzeroberfläche verwenden, die unter iOS, Android und Windows ausgeführt wird.You can use them to build one native XAML-based UI that runs on iOS, Android, and Windows. Weitere Informationen finden Sie hier.Learn more here.

Fügen Sie anschließen von Ihrem Android-, iOS- oder plattformübergreifenden Projekt einen Verweis auf das Klassenbibliotheksprojekt hinzu.Then, from your Android, iOS, or cross-platform project, add a reference the class library project.

Verweis auf die Klassenbibliothek

Erstellen der SeitenBuild your pages

Unser Beispiel zeigt eine Liste der Kunden in einer Android-App.Our example shows a list of customers in an Android app.

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.To get started with Android, iOS, and cross-platform projects, see the Xamarin developer portal.

Nächste SchritteNext steps

Hier finden Sie Antworten auf Ihre FragenFind answers to your questions

Haben Sie Fragen?Have questions? Fragen Sie uns auf Stack Overflow.Ask us on Stack Overflow. Unser Team überwacht diese Tags.Our team monitors these tags. Fragen Sie uns hier.You can also ask us here.

Geben Sie Feedback oder Vorschläge für FeaturesGive feedback or make feature suggestions

Weitere Informationen finden Sie unter UserVoice.See UserVoice.