Compartir a través de


Pasar de una aplicación de escritorio a UWP

Si tiene una aplicación de escritorio existente que se creó con .NET Framework (incluidos WPF y Windows Forms) o las API win32 de C++, tiene varias opciones para pasar a la Plataforma universal de Windows (UWP) y Windows 10/11.

Empaquetar la aplicación de escritorio en un paquete MSIX

Puedes empaquetar la aplicación de escritorio en un paquete MSIX para obtener acceso a muchas más características de Windows 10 y Windows 11. MSIX es un formato de paquete de aplicación de Windows moderno que proporciona una experiencia de empaquetado universal para todas las aplicaciones de Windows, incluidas las aplicaciones para UWP, WPF, Windows Forms y Win32. Empaquetar las aplicaciones de Windows de escritorio en paquetes MSIX le permite acceder a una sólida experiencia de instalación y actualización, un modelo de seguridad administrado con un sistema de funcionalidad flexible, compatibilidad con Microsoft Store, administración empresarial y muchos modelos de distribución personalizados. Puede empaquetar la aplicación tanto si tiene el código fuente como si solo tiene un archivo de instalador existente (como msi o App-V instalador). Después de empaquetar la aplicación, puedes integrar características de UWP, como extensiones de paquete y otros componentes de UWP.

Para obtener más información, consulte Creación de un paquete MSIX a partir del código y características de que requieren la identidad del paquete.

Uso de las API de Windows Runtime

Puedes llamar a muchas APIs de Windows Runtime directamente en tu aplicación de escritorio WPF, Windows Forms o C++ Win32 para integrar experiencias modernas que se activan para los usuarios de Windows 10. Por ejemplo, puedes llamar a las API de Windows Runtime para agregar notificaciones emergentes a tu aplicación de escritorio.

Para obtener más información, consulta Usar las API de Windows Runtime en aplicaciones de escritorio.

Migración de una aplicación de .NET Framework a una aplicación para UWP

Si la aplicación se ejecuta en .NET Framework, puede migrarla a una aplicación para UWP aprovechando .NET Standard 2.0. Mueva tanto código como pueda a las bibliotecas de clases de .NET Standard 2.0 y, a continuación, cree una aplicación para UWP que haga referencia a las bibliotecas de .NET Standard 2.0.

Compartir código en una biblioteca de .NET Standard 2.0

Si la aplicación se ejecuta en .NET Framework, coloque tanto código como pueda en las bibliotecas de clases de .NET Standard 2.0. Siempre que el código use las API definidas en el estándar, puedes reutilizarla en una aplicación para UWP. Es más fácil de lo que nunca ha sido compartir código en una biblioteca de .NET Standard porque tantas API más se incluyen en .NET Standard 2.0.

En este vídeo se explica más sobre el tema.

Adición de bibliotecas de .NET Standard

En primer lugar, agregue una o varias bibliotecas de clases de .NET Standard a la solución.

Agregar de proyecto estándar de dotnet

El número de bibliotecas que agregue a la solución depende de cómo planee organizar el código.

Asegúrese de que cada biblioteca de clases tenga como destino .NET Standard 2.0.

Destino en .NET Standard 2.0

Puede encontrar esta configuración en las páginas de propiedad del proyecto de biblioteca de clases.

En el proyecto de aplicación de escritorio, agregue una referencia al proyecto de biblioteca de clases.

Captura de pantalla del panel Explorador de soluciones que destaca la referencia de la biblioteca de clases para el proyecto .NET.

A continuación, use herramientas para determinar la cantidad de código que se ajusta al estándar. De este modo, antes de mover el código a la biblioteca, puede decidir qué partes puede reutilizar, qué partes requieren una modificación mínima y qué partes permanecerán específicas de la aplicación.

Comprobación de la compatibilidad de la biblioteca y el código

Comenzaremos con paquetes Nuget y otros archivos DLL que obtuvo de un tercero.

Si la aplicación usa cualquiera de ellas, determine si son compatibles con .NET Standard 2.0. Puede usar una extensión de Visual Studio o una utilidad de línea de comandos para hacerlo.

Use estas mismas herramientas para analizar el código. Descargue las herramientas aquí (dotnet-apiport) y vea este vídeo para aprender a usarlos.  

Si el código no es compatible con el estándar, tenga en cuenta otras formas de implementar ese código. Para comenzar, abra el explorador de API de .NET. Puede usar ese explorador para revisar las API que están disponibles en .NET Standard 2.0. Asegúrese de limitar el ámbito de la lista a .NET Standard 2.0.

dot net opción

Parte del código será específico de la plataforma y tendrá que permanecer en el proyecto de aplicación de escritorio.

Ejemplo: Migración del código de acceso a datos a una biblioteca de .NET Standard 2.0

Supongamos que tenemos una aplicación de Windows Forms muy básica que muestra a los clientes de nuestra base de datos de ejemplo Northwind.

Aplicación de Windows Forms

El proyecto contiene una biblioteca de clases de .NET Standard 2.0 con una clase estática denominada Northwind. Si movemos este código a la clase Northwind , no se compilará porque usa las SQLConnectionclases , SqlCommandy y SqlDataReader esas clases que no están disponibles en .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;
}

Podemos usar el explorador de API de .NET para encontrar una alternativa. Las DbConnectionclases , DbCommandy DbDataReader están disponibles en .NET Standard 2.0 para poder usarlas en su lugar.

Esta versión revisada usa esas clases para obtener una lista de clientes, pero para crear una DbConnection clase, es necesario pasar un objeto de fábrica que creamos en la aplicación cliente.

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

En la página de código subyacente de Windows Form, solo podemos crear una instancia de fábrica y pasarla al método .

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

Creación de una aplicación para UWP

Ya está listo para agregar una aplicación para UWP a la solución.

imagen de puente de escritorio a UWP

Todavía tendrás que diseñar páginas de interfaz de usuario en XAML y escribir cualquier código específico de la plataforma o dispositivo, pero cuando hayas terminado, podrás llegar a la amplitud completa de los dispositivos Windows 10 y Windows 11 y las páginas de la aplicación tendrán una sensación moderna que se adapte bien a diferentes tamaños y resoluciones de pantalla.

La aplicación responderá a mecanismos de entrada que no sean solo un teclado y un mouse, y las características y la configuración serán intuitivas en todos los dispositivos. Esto significa que los usuarios aprenden a hacer cosas una vez y, a continuación, funciona de una manera muy familiar independientemente del dispositivo.

Estos son solo algunos de los beneficios que se incluyen con UWP. Para obtener más información, consulte Crea experiencias excepcionales con Windows.

Agregar un proyecto para UWP

En primer lugar, agregue un proyecto de UWP a la solución.

Proyecto de UWP

A continuación, desde el proyecto de UWP, agregue una referencia al proyecto de biblioteca de .NET Standard 2.0.

Captura de pantalla del panel Explorador de Soluciones para UWP que destaca la referencia a la biblioteca de clases para el proyecto .NET.

Construye tus páginas

Agregue páginas XAML y llame al código fuente en su biblioteca de .NET Standard 2.0.

aplicación UWP

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

Para empezar a trabajar con UWP, consulta ¿Qué es una aplicación para UWP?

Pasos siguientes

Encontrar respuestas a sus preguntas

¿Tiene preguntas? Pregúntanos en Stack Overflow. Nuestro equipo supervisa estas etiquetas . También puede preguntarnos aquí .