Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Als u een bestaande bureaubladtoepassing hebt die is gebouwd met behulp van .NET Framework (inclusief WPF en Windows Forms) of C++ Win32-API's, hebt u verschillende opties voor het overstappen op het Universal Windows Platform (UWP) en Windows 10/11.
Uw bureaubladtoepassing inpakken in een MSIX-pakket
U kunt uw bureaubladtoepassing inpakken in een MSIX-pakket om toegang te krijgen tot veel meer windows 10- en Windows 11-functies. MSIX is een moderne Windows-app-pakketindeling die een universele verpakkingservaring biedt voor alle Windows-apps, waaronder UWP-, WPF-, Windows Forms- en Win32-apps. Als u uw bureaublad-Windows-apps in MSIX-pakketten inpakt, krijgt u toegang tot een robuuste installatie- en update-ervaring, een beheerd beveiligingsmodel met een flexibel mogelijkheidssysteem, ondersteuning voor de Microsoft Store, het beheer van ondernemingen en veel aangepaste distributiemodellen. U kunt uw toepassing verpakken, ongeacht of u de broncode hebt of als u alleen een bestaand installatiebestand hebt (zoals een MSI- of App-V-installatieprogramma). Nadat u uw toepassing hebt verpakt, kunt u UWP-functies, zoals pakketextensies en andere UWP-onderdelen, integreren.
Zie Een MSIX-pakket bouwen vanuit uw code en -functies waarvoor pakketidentiteit is vereistvoor meer informatie.
Windows Runtime-API's gebruiken
U kunt veel Windows Runtime-API's rechtstreeks aanroepen in uw WPF-, Windows Forms- of C++ Win32-desktopapplicatie om moderne ervaringen te integreren die aantrekkelijk zijn voor Windows 10-gebruikers. U kunt bijvoorbeeld Windows Runtime-API's aanroepen om toastmeldingen toe te voegen aan uw desktopapp.
Zie Windows Runtime-API's gebruiken in desktop-appsvoor meer informatie.
Een .NET Framework-app migreren naar een UWP-app
Als uw toepassing wordt uitgevoerd op .NET Framework, kunt u deze migreren naar een UWP-app door gebruik te maken van .NET Standard 2.0. Verplaats zoveel mogelijk code naar .NET Standard 2.0-klassebibliotheken en maak vervolgens een UWP-app die verwijst naar uw .NET Standard 2.0-bibliotheken.
Code delen in een .NET Standard 2.0-bibliotheek
Als uw toepassing wordt uitgevoerd op .NET Framework, plaatst u zoveel mogelijk code in .NET Standard 2.0-klassebibliotheken. Zolang uw code GEBRUIKMAAKT van API's die zijn gedefinieerd in de standaard, kunt u deze opnieuw gebruiken in een UWP-app. Het is eenvoudiger dan ooit om code te delen in een .NET Standard-bibliotheek, omdat er zoveel meer API's zijn opgenomen in .NET Standard 2.0.
Hier volgt een video met meer informatie.
.NET Standard-bibliotheken toevoegen
Voeg eerst een of meer .NET Standard-klassebibliotheken toe aan uw oplossing.
Het aantal bibliotheken dat u aan uw oplossing toevoegt, is afhankelijk van de wijze waarop u uw code wilt ordenen.
Zorg ervoor dat elke klassebibliotheek is gericht op de .NET Standard 2.0-.
U vindt deze instelling op de eigenschappenpagina's van het klassebibliotheekproject.
Voeg vanuit uw bureaubladtoepassingsproject een verwijzing toe naar het klassebibliotheekproject.
Gebruik vervolgens hulpprogramma's om te bepalen hoeveel van uw code voldoet aan de standaard. Op die manier kunt u, voordat u code naar de bibliotheek verplaatst, bepalen welke onderdelen u opnieuw kunt gebruiken, welke onderdelen minimale aanpassingen vereisen en welke onderdelen toepassingsspecifiek blijven.
Bibliotheek- en codecompatibiliteit controleren
We beginnen met Nuget-pakketten en andere DLL-bestanden die u hebt verkregen van een derde partij.
Als uw toepassing een van deze toepassingen gebruikt, moet u bepalen of deze compatibel zijn met .NET Standard 2.0. U kunt hiervoor een Visual Studio-extensie of een opdrachtregelprogramma gebruiken.
Gebruik dezelfde hulpprogramma's om uw code te analyseren. Download hier de hulpprogramma's (dotnet-apiport) en bekijk deze video om te leren hoe u deze kunt gebruiken.
Als uw code niet compatibel is met de standaard, kunt u andere manieren overwegen om die code te implementeren. Open eerst de .NET API Browser. U kunt die browser gebruiken om de API's te controleren die beschikbaar zijn in .NET Standard 2.0. Zorg ervoor dat u de lijst beperkt tot .NET Standard 2.0.
Sommige van uw code zijn platformspecifiek en moeten in uw bureaubladtoepassingsproject blijven.
Voorbeeld: Gegevenstoegangscode migreren naar een .NET Standard 2.0-bibliotheek
Stel dat we een zeer eenvoudige Windows Forms-toepassing hebben die klanten uit onze Northwind-voorbeelddatabase laat zien.
Het project bevat een .NET Standard 2.0-klassebibliotheek met een statische klasse met de naam Northwind. Als we deze code verplaatsen naar de klasse Northwind, wordt deze niet gecompileerd omdat deze gebruikmaakt van de SQLConnection
, SqlCommand
en SqlDataReader
klassen en die klassen die niet beschikbaar zijn in .NET Standard 2.0.
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;
}
We kunnen echter de .NET API Browser gebruiken om een alternatief te vinden. De klassen DbConnection
, DbCommand
en DbDataReader
zijn allemaal beschikbaar in .NET Standard 2.0, zodat we ze in plaats daarvan kunnen gebruiken.
In deze herziene versie worden deze klassen gebruikt om een lijst met klanten op te halen, maar om een DbConnection
klasse te maken, moeten we een factory-object doorgeven dat we in de clienttoepassing maken.
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;
}
Op de code-behind-pagina van het Windows-formulier kunnen we eenvoudig een fabrieksinstantie creëren en deze aan onze methode doorgeven.
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);
}
}
}
Een UWP-app maken
U kunt nu een UWP-app toevoegen aan uw oplossing.
U moet nog steeds UI-pagina's ontwerpen in XAML en elk apparaat of platformspecifieke code schrijven, maar wanneer u klaar bent, kunt u de volledige breedte van Windows 10- en Windows 11-apparaten bereiken en uw app-pagina's hebben een modern gevoel dat zich goed aanpast aan verschillende schermgrootten en resoluties.
Uw app reageert op andere invoermechanismen dan alleen een toetsenbord en muis, en functies en instellingen zijn intuïtief op alle apparaten. Dit betekent dat gebruikers leren hoe ze dingen eenmalig kunnen doen en dat het vervolgens op een zeer vertrouwde manier werkt, ongeacht het apparaat.
Dit zijn slechts enkele van de goede dingen die bij UWP worden geleverd. Zie Geweldige ervaringen bouwen met Windowsvoor meer informatie.
Een UWP-project toevoegen
Voeg eerst een UWP-project toe aan uw oplossing.
Voeg vervolgens vanuit uw UWP-project een verwijzing toe naar het .NET Standard 2.0-bibliotheekproject.
Uw pagina's bouwen
Voeg XAML-pagina's toe en roep de code aan in uw .NET Standard 2.0-bibliotheek.
<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);
}
}
Zie Wat is een UWP-appom aan de slag te gaan met UWP.
Volgende stappen
Antwoorden op uw vragen zoeken
Hebt u vragen? Vraag het ons op Stack Overflow. Ons team monitort deze tags . U kunt ons hier ook vragen.