Eventos
Compilación de Intelligent Apps
17 mar, 21 - 21 mar, 10
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
En este artículo se describe cómo actualizar una aplicación de escritorio de Windows Presentation Foundation (WPF) a .NET 8. Aunque WPF se ejecuta en .NET, una tecnología multiplataforma, WPF sigue siendo un marco solo de Windows. Los siguientes tipos de proyecto relacionados con WPF se pueden actualizar con el Asistente para actualización de .NET:
Si va a actualizar de .NET Framework a .NET, considere la posibilidad de revisar el artículo Diferencias con .NET de WPF y la guía de migración de .NET Framework a .NET.
Este artículo se escribió en el contexto de la actualización del proyecto Ejemplo de favoritos web, que puede descargar del Repositorio de GitHub de ejemplos de .NET.
Si va a actualizar varios proyectos, comience con proyectos que no tengan dependencias. En el ejemplo Favoritos web, el proyecto WebSiteRatings depende de la biblioteca de StarVoteControl, por lo que StarVoteControl debe actualizarse primero.
Sugerencia
Asegúrese de tener una copia de seguridad del código, como en el control de código fuente o una copia.
Siga estos pasos para actualizar un proyecto en Visual Studio:
Haga clic con el botón derecho en el proyecto StarVoteControl en la ventana del Explorador de soluciones y seleccione Actualizar:
Elemento del menú Actualizar del Asistente para actualización de .NET en Visual Studio.
Se abre una nueva pestaña que le pide que elija cómo desea que se realice la actualización.
Seleccione Actualización local del proyecto.
A continuación, seleccione la plataforma de destino. En función del tipo de proyecto que está actualizando, se presentan diferentes opciones. .NET Standard 2.0 es una buena opción si la biblioteca no se basa en una tecnología de escritorio como WPF y se puede usar en proyectos de .NET Framework y proyectos de .NET. Sin embargo, las versiones más recientes de .NET proporcionan muchas mejoras de lenguaje y compilador a través de .NET Standard.
Seleccione .NET 8.0 y después, seleccione Siguiente.
Se muestra un árbol con todos los artefactos relacionados con el proyecto, como archivos de código y bibliotecas. Puede actualizar artefactos individuales o todo el proyecto, que es el valor predeterminado. Seleccione Actualizar selección para iniciar la actualización.
Una vez finalizada la actualización, se muestran los resultados:
La pestaña Resultados de actualización del Asistente para actualización de .NET, que muestra 7 de los 21 elementos se omitieron.
Los artefactos con un círculo verde sólido se actualizaron mientras se omitían círculos verdes vacíos. Los artefactos omitidos significan que el asistente de actualización no encontró nada que actualizar.
Ahora que se actualiza la biblioteca auxiliar de la aplicación, actualice la aplicación principal.
Una vez actualizadas todas las bibliotecas auxiliares, se puede actualizar el proyecto de aplicación principal. Siga estos pasos:
Una vez completada la actualización, se muestran los resultados. Si un elemento tiene un símbolo de advertencia, significa que hay una nota para que lea, lo que puede hacer expandiendo el elemento.
Después de actualizar el proyecto, limpie y compile el proyecto.
Si la aplicación encontró algún error, puede encontrarlos en la ventana Lista de errores con una recomendación sobre cómo corregirlas.
Si el proyecto se está actualizando de .NET Framework a .NET, revise la información del artículo Modernización después de actualizar a .NET desde .NET Framework.
Después de actualizar, querrá:
Compruebe los paquetes NuGet.
El Asistente para actualización de .NET actualizó algunos paquetes a nuevas versiones. Con la aplicación de ejemplo proporcionada en este artículo, el Microsoft.Data.Sqlite
Paquete NuGet se actualizó de 1.0.0 a 8.0.x. Sin embargo, 1.0.0 depende del SQLite
paquete NuGet, pero 8.0.x quita esa dependencia. El proyecto sigue haciendo referencia al paquete NuGet SQLite
, aunque ya no es necesario. Tanto el SQLite
y SQLite.Native
paquetes NuGet se pueden quitar del proyecto.
Limpie los paquetes NuGet antiguos.
El archivo packages.config ya no es necesario y se puede eliminar del proyecto, ya que las referencias del paquete NuGet ahora se declaran en el archivo del proyecto. Además, la carpeta de caché de paquetes NuGet local, denominada Paquetes, se encuentra en la carpeta o en la carpeta principal del proyecto. Esta carpeta de caché local se puede eliminar. Las nuevas referencias del paquete NuGet usan una carpeta de caché global para los paquetes, disponible en el directorio de perfiles del usuario, denominada .nuget\packages.
Quite la biblioteca System.Configuration
.
La mayoría de las aplicaciones de .NET Framework hacen referencia a la bibliotecaSystem.Configuration
. Después de actualizar, es posible que todavía se haga referencia a esta biblioteca directamente.
La System.Configuration
biblioteca usa el archivo app.config para proporcionar opciones de configuración en tiempo de ejecución a la aplicación. Para .NET, esta biblioteca se ha reemplazado por el paquete NuGet System.Configuration.ConfigurationManager
. Quite la referencia a la biblioteca y agregue el paquete NuGet al proyecto.
Busque lugares para modernizar la aplicación.
Las API y las bibliotecas han cambiado bastante desde que se publicó .NET. Y en la mayoría de los casos, .NET Framework no tiene acceso a estas mejoras. Al actualizar a .NET, ahora tiene acceso a bibliotecas más modernas.
En las secciones siguientes se describen las áreas que moderniza la aplicación de ejemplo que usa este artículo.
El control WebBrowser al que hace referencia la aplicación de ejemplo de WPF se basa en Internet Explorer, que no está actualizado. WPF para .NET puede usar el control WebView2 basado en Microsoft Edge. Complete los pasos siguientes para actualizar al nuevo control de explorador web WebView2:
Agregue el paquete NuGet Microsoft.Web.WebView2
.
En el archivo MainWindow.xaml:
Importe el control al espacio de nombres wpfControls en el elemento raíz:
<mah:MetroWindow x:Class="WebSiteRatings.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:local="clr-namespace:WebSiteRatings"
xmlns:vm="clr-namespace:WebSiteRatings.ViewModels"
xmlns:VoteControl="clr-namespace:StarVoteControl;assembly=StarVoteControl"
xmlns:wpfControls="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
Loaded="MetroWindow_Loaded"
mc:Ignorable="d"
Title="My Sites" Height="650" Width="1000">
Abajo, donde se declara el elemento <Border>
, quite el control WebBrowser
y reemplácelo por el control wpfControls:WebView2
:
<Border Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" BorderThickness="1" BorderBrush="Black" Margin="5">
<wpfControls:WebView2 x:Name="browser" ScrollViewer.CanContentScroll="True" />
</Border>
Edite el archivo de código subyacente MainWindow.xaml.cs. Actualice el método ListBox_SelectionChanged
para establecer la propiedad browser.Source
en una clase Uri válida. Este código se pasó anteriormente en la dirección URL del sitio web como una cadena, pero el control WebView2 nuevo requiere una clase Uri
.
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var siteCollection = (ViewModels.SiteCollection)DataContext;
if (siteCollection.SelectedSite != null)
browser.Source = new Uri(siteCollection.SelectedSite.Url);
else
browser.NavigateToString("<body></body>");
}
En función de la versión de Windows que ejecute un usuario de la aplicación, es posible que deba instalar el entorno de ejecución WebView2. Para obtener más información, consulte Introducción a WebView2 en aplicaciones WPF.
.NET Framework usa el archivo App.config para cargar la configuración de la aplicación, como cadenas de conexión y proveedores de registro. .NET ahora usa el archivo appsettings.json para la configuración de la aplicación. Los archivos App.config se admiten en .NET a través del paquete NuGet System.Configuration.ConfigurationManager
y el paquete NuGet Microsoft.Extensions.Configuration
proporciona compatibilidad con appsettings.json.
A medida que otras bibliotecas se actualizan a .NET, se modernizarán mediante la compatibilidad con appsettings.json en lugar de App.config. Por ejemplo, los proveedores de registro de .NET Framework que se han actualizado para .NET 6 ya no usan App.config para la configuración. Es bueno seguir su dirección y también alejarse del uso de App.config donde pueda.
Por ejemplo, después de actualizar la aplicación de ejemplo de WPF, use appsettings.json para la cadena de conexión a la base de datos local.
Quite el paquete NuGet System.Configuration.ConfigurationManager
.
Agregue el paquete NuGet Microsoft.Web.WebView2
.
Agregue un archivo al proyecto denominado appsettings.json.
Establezca el archivo appsettings.json para copiarlo en el directorio de salida.
Establezca la copia en la configuración de salida a través de Visual Studio mediante la ventana Propiedades después de seleccionar el archivo en el Explorador de soluciones. Como alternativa, puede editar el proyecto directamente y agregar los siguientes ItemGroup
:
<ItemGroup>
<Content Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
Migre la configuración del archivo App.config a un nuevo archivo appsettings.json.
En la aplicación de ejemplo de WPF, app.config solo contenía una sola cadena de conexión. Edite el archivo appsettings.json para definir la cadena de conexión:
{
"ConnectionStrings": {
"database": "DataSource=sqlite.db;"
}
}
Edite el archivo App.xaml.cs, instando un objeto de configuración que carga el archivo appsettings.json, se resaltan las líneas agregadas:
using System.Windows;
using Microsoft.Extensions.Configuration;
namespace WebSiteRatings
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public static IConfiguration Config { get; private set; }
public App()
{
Config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
}
}
}
En el archivo .\Models\Database.cs, cambie el método OpenConnection
para usar la propiedad App.Config
nueva. Esto requiere la importación del espacio de nombres Microsoft.Extensions.Configuration
:
using Microsoft.Data.Sqlite;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;
namespace WebSiteRatings.Models
{
internal class Database
{
public static SqliteConnection OpenConnection() =>
new SqliteConnection(App.Config.GetConnectionString("database"));
public static IEnumerable<Site> ReadSites()
GetConnectionString
es un método de extensión proporcionado por el espacio de nombres Microsoft.Extensions.Configuration
.
Comentarios de .NET Desktop feedback
.NET Desktop feedback es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Eventos
Compilación de Intelligent Apps
17 mar, 21 - 21 mar, 10
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraCursos
Módulo
En este módulo, aprenderá cuándo, por qué y cómo modernizar una aplicación de ASP.NET Framework a ASP.NET Core utilizando el Asistente para actualización.
Certificación
Microsoft Certified: Azure Cosmos DB Developer Specialty - Certifications
Escribe consultas eficaces, crea directivas de indexación, administra y aprovisiona recursos en la API de SQL y el SDK con Microsoft Azure Cosmos DB.
Documentación
Diferencias entre .NET Framework y .NET - WPF .NET
Se describen las diferencias entre la implementación de .NET Framework de Windows Presentation Foundation (WPF) y WPF de .NET.
Tecnologías de .NET Framework no disponibles en .NET 6+
Obtenga información sobre las tecnologías de .NET Framework que no están disponibles en .NET 6 y versiones posteriores.
Novedades de WPF para .NET 8 - WPF .NET
Obtenga información sobre las novedades de Windows Presentation Foundation (WPF) para .NET. 8. .NET 8 se publicó en noviembre de 2023.