Поделиться через


Переход с классического приложения на UWP

Если у вас есть существующее классическое приложение, созданное с помощью платформа .NET Framework (включая WPF и Windows Forms) или API Win32 на C++, вы можете перейти на универсальная платформа Windows (UWP) и Windows 10/11.

Упаковка классического приложения в пакет MSIX

Вы можете упаковать классическое приложение в пакет MSIX, чтобы получить доступ к многим дополнительным функциям Windows 10 и Windows 11. MSIX — это современный универсальный формат пакетов для упаковки любых приложений для Windows, включая приложения UWP, WPF, Windows Forms и Win32. Упаковав классические приложения для Windows в MSIX-пакеты, вы получаете доступ к надежным возможностям установки и обновления, управляемой модели безопасности с гибкой системой возможностей, поддержке Microsoft Store, возможностям управления предприятием и многим пользовательским моделям распространения. Вы можете упаковыть приложение независимо от того, есть ли исходный код или у вас есть только существующий файл установщика (например, установщик MSI или App-V). После упаковки приложения можно интегрировать функции UWP, такие как расширения пакетов и другие компоненты UWP.

Дополнительные сведения см. в статье о создании пакета MSIX из кода и компонентов, требующих удостоверения пакета.

Использование API среда выполнения Windows

Для интеграции современных возможностей, которые могут заинтересовать пользователей Windows 10, большинство API-интерфейсов среды выполнения Windows можно вызывать напрямую из классических приложений WPF, Windows Forms или C++ Win32. Например, вы можете вызывать API-интерфейсы среды выполнения Windows, чтобы добавлять всплывающие уведомления в приложение.

Дополнительные сведения см. в статье об использовании API-интерфейсов среды выполнения Windows для классических приложений.

Перенос приложения платформа .NET Framework в приложение UWP

Если приложение работает в платформа .NET Framework, его можно перенести в приложение UWP, используя .NET Standard 2.0. Переместите столько кода, сколько можно сделать в библиотеки классов .NET Standard 2.0, а затем создайте приложение UWP, которое ссылается на библиотеки .NET Standard 2.0.

Общий доступ к коду в библиотеке .NET Standard 2.0

Если приложение выполняется в платформа .NET Framework, поместите столько кода, сколько можно сделать в библиотеки классов .NET Standard 2.0. Если код использует API, определенные в стандарте, его можно повторно использовать в приложении UWP. Проще, чем когда-либо было совместно использовать код в библиотеке .NET Standard, так как так много api включены в .NET Standard 2.0.

Вот видео, которое рассказывает вам больше об этом.

Добавление библиотек .NET Standard

Сначала добавьте в решение одну или несколько библиотек классов .NET Standard.

Добавление стандартного проекта dotnet

Количество библиотек, добавляемых в решение, зависит от того, как вы планируете упорядочить код.

Убедитесь, что каждая библиотека классов предназначена для .NET Standard 2.0.

Целевой объект .NET Standard 2.0

Этот параметр можно найти на страницах свойств проекта библиотеки классов.

В проекте классического приложения добавьте ссылку на проект библиотеки классов.

Снимок экрана: панель Обозреватель решений, которая вызывает ссылку на библиотеку классов для проекта dot NET.

Затем используйте средства, чтобы определить, сколько из кода соответствует стандарту. Таким образом, перед перемещением кода в библиотеку можно решить, какие части можно повторно использовать, какие части требуют минимального изменения и какие части останутся конкретными приложениями.

Проверка совместимости библиотеки и кода

Начнем с пакетов Nuget и других dll-файлов, полученных от стороннего производителя.

Если приложение использует любой из них, определите, совместимы ли они с .NET Standard 2.0. Для этого можно использовать расширение Visual Studio или служебную программу командной строки.

Используйте эти же средства для анализа кода. Скачайте здесь средства (dotnet-apiport), а затем просмотрите это видео, чтобы узнать, как их использовать.  

Если код не совместим со стандартом, рассмотрите другие способы реализации этого кода. Начните с открытия браузера API .NET. Этот браузер можно использовать для просмотра API, доступных в .NET Standard 2.0. Не забудьте ограничить список .NET Standard 2.0.

Параметр dot net

Некоторые из кода будут зависят от платформы и должны оставаться в проекте классического приложения.

Пример. Перенос кода доступа к данным в библиотеку .NET Standard 2.0

Предположим, что у нас есть очень простое приложение Windows Forms, показывающее клиентов из примера базы данных Northwind.

Приложение Windows Forms

Проект содержит библиотеку классов .NET Standard 2.0 со статическим классом с именем Northwind. Если мы переместим этот код в класс Northwind, он не будет компилироваться, так как он использует SqlCommandSQLConnectionклассы и SqlDataReader классы, которые недоступны в .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;
}

Мы можем использовать браузер API .NET, чтобы найти альтернативу, хотя. DbCommandКлассы DbConnectionи DbDataReader классы доступны в .NET Standard 2.0, поэтому их можно использовать.

В этой обновленной версии эти классы используются для получения списка клиентов, но для создания DbConnection класса необходимо передать объект фабрики, который мы создадим в клиентском приложении.

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

На странице кода в Windows Form можно просто создать экземпляр фабрики и передать его в наш метод.

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

Создание приложения UWP

Теперь вы готовы добавить приложение UWP в решение.

Образ моста на компьютере с UWP

Вам по-прежнему придется разрабатывать страницы пользовательского интерфейса в XAML и писать любой код устройства или платформы, но при завершении вы сможете достичь полной ширины устройств Windows 10 и Windows 11, а страницы приложений будут иметь современное ощущение, что хорошо адаптируется к разным размерам экрана и разрешениям.

Приложение будет реагировать на механизмы ввода, отличные от клавиатуры и мыши, а функции и параметры будут интуитивно понятными на разных устройствах. Это означает, что пользователи учатся делать вещи один раз, а затем он работает очень знакомым способом независимо от устройства.

Это всего лишь несколько хороших, которые приходят с UWP. Дополнительные сведения см. в статье "Создание отличных возможностей с Windows".

Добавление проекта UWP

Сначала добавьте проект UWP в решение.

Проект UWP

Затем из проекта UWP добавьте ссылку на проект библиотеки .NET Standard 2.0.

Снимок экрана: панель Обозреватель решений UWP, которая вызывает ссылку на ссылку на библиотеку классов для проекта dot NET.

Создание страниц

Добавьте страницы XAML и вызовите код в библиотеке .NET Standard 2.0.

Приложение 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);
    }
}

Чтобы приступить к работе с UWP, ознакомьтесь с разделом "Что такое приложение UWP".

Доступ к устройствам iOS и Android

Вы можете получить доступ к устройствам Android и iOS, добавив проекты Xamarin.

Примечание.

Для новых кроссплатформенных проектов рекомендуется использовать .NET MAUI.

Изображение, на котором показано устройство Android и устройство I O S, отображающее приложения Xamarin.

Эти проекты позволяют использовать C# для создания приложений Android и iOS с полным доступом к API для конкретной платформы и устройств. Эти приложения используют аппаратное ускорение для конкретной платформы и компилируются для собственной производительности.

Они имеют доступ к полному спектру функциональных возможностей, предоставляемых базовой платформой и устройством, включая такие возможности, как iBeacons и Фрагменты Android, и вы будете использовать стандартные собственные элементы управления пользовательского интерфейса для создания интерфейсов, которые выглядят и чувствуют, как пользователи ожидают их.

Как и для UWPs, стоимость добавления приложения Android или iOS ниже, так как вы можете повторно использовать бизнес-логику в библиотеке классов .NET Standard 2.0. Вам потребуется разработать страницы пользовательского интерфейса в XAML и написать любой код устройства или платформы.

Добавление проекта Xamarin

Сначала добавьте в решение проект Android, iOS или Кроссплатформенный проект.

Эти шаблоны можно найти в диалоговом окне "Добавление нового проекта" в группе Visual C#.

Снимок экрана: диалоговое окно

Примечание.

Кроссплатформенные проекты отлично подходят для приложений с небольшими функциональными возможностями для конкретной платформы. Их можно использовать для создания собственного пользовательского интерфейса на основе XAML, работающего в iOS, Android и Windows. Подробнее см. здесь.

Затем из проекта Android, iOS или кроссплатформенного проекта добавьте ссылку на проект библиотеки классов.

Снимок экрана: панель Обозреватель решений, которая вызывает ссылку на ссылку на библиотеку классов для проекта Android, i O S или кроссплатформенного проекта.

Создание страниц

В нашем примере показан список клиентов в приложении Android.

Приложение Android

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

Сведения о начале работы с проектами Android, iOS и кроссплатформенных приложений см. на портале разработчика Xamarin.

Следующие шаги

Получение ответов на вопросы

Есть вопросы? Задайте их на Stack Overflow. Наша команда следит за этими тегами. Вы также можете задать нам вопросы здесь.