Wechseln von einer Desktop Anwendung zu einer UWPMove from a desktop application to UWP

Wenn Sie über eine vorhandene Desktop Anwendung verfügen, die mit dem .NET Framework (einschließlich WPF-und Windows Forms)-oder C++ Win32-APIs erstellt wurde, haben Sie mehrere Optionen für den Umstieg auf 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.

Verpacken der Desktop Anwendung in einem msix-PaketPackage your desktop application in an MSIX package

Sie können Ihre Desktop Anwendung in einem msix-Paket Verpacken, um Zugriff auf viele weitere Windows 10-Funktionen zu erhalten.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 Ihre Anwendung Verpacken, unabhängig davon, ob Sie über den Quellcode verfügen oder ob Sie nur über eine vorhandene Installationsdatei verfügen (z. b. einen MSI-oder App-V-Installer).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 die Anwendung Paketieren, können Sie UWP-Funktionen wie Paket Erweiterungen 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 Package Desktop Applications (Desktop Bridge) und Features, die die Paket Identität erfordern.For more information, see Package desktop applications (Desktop Bridge) and Features that require package identity.

Verwenden von Windows-Runtime-APIsUse 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.You can call many Windows Runtime 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 Windows-Runtime-APIs aufrufen, um Ihrer Desktop-App Popupbenachrichtigungen hinzuzufügen.For example, you can call Windows Runtime APIs to add toast notifications to your desktop app.

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

Migrieren einer .NET Framework-APP zu einer UWP-AppMigrate a .NET Framework app to a UWP app

Wenn die Anwendung auf dem .NET Framework ausgeführt wird, können Sie Sie zu einer UWP-App migrieren, indem Sie .NET Standard 2,0 nutzen.If your application runs on the .NET Framework, you can migrate it to a UWP app by leveraging .NET Standard 2.0. 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.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.

Freigeben von Code in einer .NET Standard 2,0-BibliothekShare code in a .NET Standard 2.0 library

Wenn die Anwendung auf dem .NET Framework ausgeführt wird, platzieren Sie so viel Code wie möglich in .NET Standard 2,0-Klassenbibliotheken.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 im Standard definiert sind, können Sie Sie in einer UWP-APP wieder verwenden.As long as your code uses APIs that are defined in the standard, you can reuse it in a UWP app. Es ist einfacher, Code in einer .NET Standard Bibliothek gemeinsam zu nutzen, da so viele weitere APIs in der .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.

Im folgenden finden Sie ein Video, das Sie darüber informiert.Here's a video that tells you more about it.

.NET Standard Bibliotheken hinzufügenAdd .NET Standard libraries

Fügen Sie der Projekt Mappe zunächst mindestens eine .NET Standard-Klassenbibliothek hinzu.First, add one or more .NET Standard class libraries to your solution.

DotNet-Standard Projekt hinzufügen

Die Anzahl der Bibliotheken, die Sie Ihrer Projekt Mappe 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 den .NET Standard 2,0abzielt.Make sure that each class library targets the .NET Standard 2.0.

Ziel .NET Standard 2,0

Diese Einstellung finden Sie auf den Eigenschaften Seiten des Klassen Bibliotheks Projekts.You can find this setting in the property pages of the class library project.

Fügen Sie in Ihrem Desktop Anwendungsprojekt einen Verweis auf das Klassen Bibliotheksprojekt hinzu.From your desktop application project, add a reference to the class library project.

Klassen Bibliotheks Referenz

Verwenden Sie als nächstes die Tools, um zu bestimmen, wie viel Code 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 von Code in die Bibliothek entscheiden, welche Teile Sie wieder verwenden 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 Bibliothek-und Code KompatibilitätCheck 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 Sie von Ihrer Anwendung verwendet werden, stellen Sie fest, ob Sie mit dem .NET Standard 2,0 kompatibel sind.If your application uses any of them, determine if they are compatible with the .NET Standard 2.0. Hierfür können Sie eine Visual Studio-Erweiterung oder ein Befehlszeilen-Hilfsprogramm verwenden.You can use a Visual Studio extension or a command-line utility to do that.

Verwenden Sie dieselben Tools, um Ihren Code zu analysieren.Use these same tools to analyze your code. Laden Sie die Tools hier herunter (dotnet-apiport), und sehen Sie sich dieses Video an, um zu erfahren, wie Sie es verwenden.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, sollten Sie andere Möglichkeiten in Erwägung nehmen, den Code zu implementieren.If your code isn't compatible with the standard, consider other ways that you could implement that code. Öffnen Sie zunächst den .NET-API-Browser.Start by opening the .NET API Browser. Sie können diesen Browser zum Überprüfen der APIs verwenden, die in der .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. Stellen Sie sicher, dass Sie den Bereich der Liste auf den .NET Standard 2,0 festlegen.Make sure to scope the list to the .NET Standard 2.0.

DotNet-Option

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

Beispiel: Migrieren von Datenzugriffs Code zu einer .NET Standard 2,0-BibliothekExample: Migrating data access code to a .NET Standard 2.0 library

Angenommen, wir verfügen über eine sehr einfache Windows Forms Anwendung, die Kunden aus der Beispieldatenbank Northwind zeigt.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 .NET Standard 2,0-Klassenbibliothek mit einer statischen Klasse namens Northwind.The project contains a .NET Standard 2.0 class library with a static class named Northwind. Wenn Sie diesen Code in die Northwind -Klasse verschieben, wird er nicht kompiliert, da SQLConnectioner SqlCommanddie Klassen SqlDataReader , und verwendet, und die Klassen, die nicht im .NET Standard 2,0 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;
}

Mit dem .net- API-Browser können Sie jedoch eine Alternative suchen.We can use the .NET API Browser to find an alternative though. Die DbConnectionKlassen DbCommand, und DbDataReader sind alle im .NET Standard 2,0 verfügbar, damit wir Sie 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.

Diese überarbeitete Version verwendet diese Klassen, um eine Kundenliste zu erhalten. zum Erstellen DbConnection einer Klasse müssen wir jedoch ein Factoryobjekt übergeben, das in der Client Anwendung erstellt wird.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;
}

Auf der Code Behind-Seite des Windows-Formulars können Sie einfach eine factoryinstanz erstellen und Sie 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

Nun können Sie Ihrer Projekt Mappe eine UWP-app hinzufügen.Now you're ready to add a UWP app to your solution.

Bild für Desktop-zu-UWP-Bridge

Sie müssen weiterhin UI-Seiten in XAML entwerfen und jeden Geräte-oder plattformspezifischen Code schreiben, aber wenn Sie dies erledigt haben, können Sie die gesamte Breite von Windows 10-Geräten erreichen, und Ihre APP-Seiten haben ein modernes Gefühl, das sich gut an verschiedene Bildschirmgrößen und Auflösungen anpasst.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 antwortet auf andere Eingabe Mechanismen als nur auf Tastatur und Maus, und Features und Einstellungen werden Geräte übergreifend 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 sich ein Mal mit der Vorgehensweise vertraut machen, und dann funktioniert Sie in einer sehr vertrauten Weise, unabhängig vom Gerät.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 der in UWP enthaltenen Leckereien.These are just a few of the goodies that come with UWP. Weitere Informationen finden Sie unter Erstellen von hervor artigen Erfahrungen mit Windows.To learn more, see Build great experiences with Windows.

Hinzufügen eines UWP-ProjektsAdd a UWP project

Fügen Sie der Projekt Mappe zunächst ein UWP-Projekt hinzu.First, add a UWP project to your solution.

UWP-Projekt

Fügen Sie dann im UWP-Projekt einen Verweis auf das .NET Standard 2,0-Bibliotheksprojekt hinzu.Then, from your UWP project, add a reference the .NET Standard 2.0 library project.

Klassen Bibliotheks Referenz

Erstellen Ihrer SeitenBuild your pages

Fügen Sie XAML-Seiten hinzu, und nennen Sie den Code in Ihrer .NET Standard 2,0-Bibliothek.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);
    }
}

Informationen zu den ersten Schritten 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

Sie können Android-und IOS-Geräte erreichen, indem Sie xamarin-Projekte hinzufügen.You can reach Android and iOS devices by adding Xamarin projects.

Xamarin-Apps

Mit diesen Projekten können Sie c# verwenden, um Android-und IOS-apps mit Vollzugriff auf plattformspezifische und gerätespezifische APIs zu erstellen.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 werden 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 an Funktionen, die von der zugrunde liegenden Plattform und dem Gerät verfügbar gemacht werden, einschließlich plattformspezifischer Funktionen wie ibeacons und Android-Fragmente, und Sie verwenden standardmäßige Native Benutzeroberflächen-Steuerelemente, um Benutzeroberflächen zu erstellen, die die Benutzer erwarten, die Sie erwarten.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.

Ebenso wie uwps sind die Kosten für das Hinzufügen einer Android-oder IOS-App geringer, da Sie die Geschäftslogik in einer .NET Standard 2,0-Klassenbibliothek wieder verwenden 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 ihre UI-Seiten in XAML entwerfen und jeden Geräte-oder plattformspezifischen Code schreiben.You'll have to design your UI pages in XAML and write any device or platform-specific code.

Xamarin-Projekt hinzufügenAdd a Xamarin project

Fügen Sie Ihrer Projekt Mappe zunächst ein Android-, IOS-oder Platt Form übergreifendes Projekt hinzu.First, add an Android, iOS, or Cross-Platform project to your solution.

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

Xamarin-Apps

Hinweis

Plattformübergreifende Projekte eignen sich hervorragend für apps mit wenig plattformspezifischer Funktionalität.Cross-platform projects are great for apps with little platform-specific functionality. Sie können Sie verwenden, um eine native XAML-basierte Benutzeroberfläche zu erstellen, 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. Hiererhalten Sie weitere Informationen.Learn more here.

Fügen Sie dann in Ihrem Android-, IOS-oder plattformübergreifenden Projekt einen Verweis auf das Klassen Bibliotheksprojekt hinzu.Then, from your Android, iOS, or cross-platform project, add a reference the class library project.

Klassen Bibliotheks Referenz

Erstellen Ihrer SeitenBuild your pages

In unserem Beispiel wird eine Liste von Kunden in einer Android-App angezeigt.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-Entwickler Portal.To get started with Android, iOS, and cross-platform projects, see the Xamarin developer portal.

Nächste SchritteNext steps

Antworten auf Ihre FragenFind answers to your questions

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

Feedback geben oder Funktions Vorschläge machenGive feedback or make feature suggestions

Siehe UserVoice.See UserVoice.