
Книга о разработке нативных, кросc-платформенных и веб-приложений на платформе .NET с использованием языка C#. Подробно рассмотрена экосистема платформы .NET, средства связи в распределённых системах (gRPC и SignalR), инструменты современной веб-разработки – Blazor, библиотека машинного обучения ML.NET, фреймворк для веб-разработки ASP.NET Core, инструментарий Entity Framework Core 7. Объяснены возможности подготовки микросервисной архитектуры, а также развёртывание контейнеров и управление ими с применением Docker Swarm и Kubernetes.
Для разработчиков
Создаём кросс-платформенные приложения на базе .NET Core
Платформа .NET – это развитая среда, в которой можно разрабатывать и выполнять приложения любых типов. Хотя официально на платформе .NET поддерживается несколько языков программирования, наиболее популярен среди них именно язык C#, и его можно считать флагманским.
В этой книге разобраны основы .NET, пошагово объяснено, как создавать нативные приложения, которые легко адаптировать для работы на многих платформах. Уделено внимание взаимодействию с базами данных и работе с Entity Framework Core 7. Рассматривается ASP.NET Core, главный фреймворк .NET, предназначенный для веб-разработки.
Обсуждаются и более современные веб-технологии, в частности Blazor (технология на основе WebAssembly, специально предназначенная для платформы .NET), а также настройка двунаправленной коммуникации с использованием SignalR и gRPC. В последней части книги описано развёртывание и контейнеризация приложения с применением Docker Swarm и Kubernetes.
Прочитав книгу, вы научитесь уверенно создавать приложения на языке C# для платформы .NET.
В этой книге
-
- Знакомство с новейшими возможностями языка C#
- Работа с новыми возможностями .NET 7, в том числе, SDK и библиотеками
- Создание веб-приложений с применением ASP.NET Core 7
- Подготовка моделей машинного обучения с использованием ML.NET
- Приёмы, позволяющие быстро и безопасно собирать и развёртывать распределённые приложения
Для кого эта книга
Книга рассчитана на широкую аудиторию разработчиков: для тех, кто хочет изучить язык C# и платформу .NET в их современной редакции, для желающих освоить веб-разработку на платформе .NET и для тех, кому требуется разрабатывать нативные и кросс-платформенные приложения с применением C# и .NET.
Книгу “C# 11 и .NET 7.0” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Об авторе……………………………………………………………………………………………….. 15
О рецензентах………………………………………………………………………………………… 16
Благодарности……………………………………………………………………………………….. 17
Предисловие…………………………………………………………………………………………… 18
Комплект исходного кода и цветные иллюстрации……………………………………………………………….. 22
Глава 1. Знакомство со структурой приложений .NET 7………………………… 23
Введение……………………………………………………………………………………………………………………………………… 23
Структура…………………………………………………………………………………………………………………………………… 24
Цели…………………………………………………………………………………………………………………………………………….. 24
Настройка среды разработки…………………………………………………………………………………………………… 24
Компьютеры, подходящие для разработки ПО……………………………………………………………….. 24
.NET 7 SDK………………………………………………………………………………………………………………………….. 24
Установка редактора кода или среды IDE………………………………………………………………………. 25
Установка подходящего редактора кода……………………………………………………………….. 26
Установка подходящей IDE…………………………………………………………………………………….. 28
Microsoft Visual Studio 2022………………………………………………………………………………………………. 28
Microsoft Visual Studio 2022 for Mac……………………………………………………………………….. 29
JetBrains Rider……………………………………………………………………………………………………………………… 30
Создание приложения .NET 7…………………………………………………………………………………………………… 31
Создание приложения с помощью CLI…………………………………………………………………………….. 32
Создание приложения с помощью графического интерфейса IDE……………………………….. 33
Обзор структуры проекта .NET 7……………………………………………………………………………………………… 35
Добавление объекта struct………………………………………………………………………………………………… 35
Добавление интерфейса и класса…………………………………………………………………………………….. 36
Изменение точки входа в приложение……………………………………………………………………………… 39
Основы C# 11 и встроенные типы данных………………………………………………………………………………. 41
Встроенные типы данных…………………………………………………………………………………………………. 41
Поток управления………………………………………………………………………………………………………………. 43
Пользовательские типы в C#…………………………………………………………………………………………….. 44
Модификаторы доступа……………………………………………………………………………………………………. 44
Заключение………………………………………………………………………………………………………………………………… 45
Что следует помнить………………………………………………………………………………………………………………….. 46
Контрольные вопросы………………………………………………………………………………………………………………. 46
Ответы…………………………………………………………………………………………………………………………………. 47
Основные термины…………………………………………………………………………………………………………………….. 47
Глава 2. Обзор возможностей C# 11……………………………………………………….. 48
Введение……………………………………………………………………………………………………………………………………… 48
Структура…………………………………………………………………………………………………………………………………… 48
Цели…………………………………………………………………………………………………………………………………………….. 48
Предварительные условия………………………………………………………………………………………………………… 49
Автоматическая инициализация структур………………………………………………………………………………. 49
Обобщенные атрибуты……………………………………………………………………………………………………………… 50
Пример обобщенного атрибута………………………………………………………………………………………… 51
Сопоставление последовательности с образцом……………………………………………………………………. 53
Демонстрация сопоставления последовательности с образцом…………………………………… 54
Сопоставление последовательности с образцом типа char span………………………………….. 54
Новые операции со строками…………………………………………………………………………………………………… 56
Заключение………………………………………………………………………………………………………………………………… 59
Что следует помнить………………………………………………………………………………………………………………….. 60
Контрольные вопросы………………………………………………………………………………………………………………. 60
Ответы…………………………………………………………………………………………………………………………………. 61
Основные термины…………………………………………………………………………………………………………………….. 61
Глава 3. Что нового в .NET 7?………………………………………………………………… 62
Введение……………………………………………………………………………………………………………………………………… 62
Структура…………………………………………………………………………………………………………………………………… 62
Цели…………………………………………………………………………………………………………………………………………….. 62
Предварительные условия………………………………………………………………………………………………………… 63
Улучшения в SDK и инструментах сборки………………………………………………………………………………. 63
Улучшения инструментов командной строки…………………………………………………………………. 63
NativeAOT и функция обрезки библиотек………………………………………………………………………… 64
Центральный диспетчер пакетов……………………………………………………………………………………… 65
Обновления библиотек System и Microsoft……………………………………………………………………………… 66
Поддержка микросекунд и наносекунд……………………………………………………………………………. 66
Новые возможности для работы с JSON………………………………………………………………………….. 68
Свойство MaxDepth класса JsonWriterOptions………………………………………………………. 69
Конфигурация JsonSerializerOptions по умолчанию…………………………………………….. 70
Вызовы HTTP PATCH для JSON……………………………………………………………………………….. 70
Полиморфизм JSON…………………………………………………………………………………………………… 71
Тестирование возможностей JSON………………………………………………………………………….. 73
Новые возможности класса Stream…………………………………………………………………………………… 73
Улучшения RegEx………………………………………………………………………………………………………………. 75
Улучшения в криптографии………………………………………………………………………………………………. 76
Новый TAR API………………………………………………………………………………………………………………….. 78
Улучшения наблюдаемости……………………………………………………………………………………………………… 80
Новые способы мониторинга действий……………………………………………………………………………. 80
Мониторинг остановленных действий……………………………………………………………………. 80
Событие изменения текущего действия………………………………………………………………….. 81
Перечисление свойств действия………………………………………………………………………………. 81
Показатель UpDownCounter……………………………………………………………………………………………… 83
Критические изменения в .NET 7………………………………………………………………………………………………. 83
Допустимость неопределенных значений в пространстве имен Microsoft.Extensions… 83
Конечные точки: устаревшие и не допускающие неопределенных значений……………… 84
Ограничение PatternContext……………………………………………………………………………………………… 84
Многоуровневый поиск в Windows отключен…………………………………………………………………. 84
Сериализация пользовательских типов в MSBuild…………………………………………………………. 84
Заключение………………………………………………………………………………………………………………………………… 85
Что следует помнить………………………………………………………………………………………………………………….. 85
Контрольные вопросы………………………………………………………………………………………………………………. 86
Ответы…………………………………………………………………………………………………………………………………. 86
Основные термины…………………………………………………………………………………………………………………….. 87
Глава 4. MAUI и кросс-платформенные нативные приложения…………….. 88
Введение……………………………………………………………………………………………………………………………………… 88
Структура…………………………………………………………………………………………………………………………………… 88
Цели…………………………………………………………………………………………………………………………………………….. 89
Предварительные условия………………………………………………………………………………………………………… 89
Общие сведения о MAUI……………………………………………………………………………………………………………. 89
Включение среды разработки MAUI……………………………………………………………………………….. 90
Создание простых MAUI-приложений…………………………………………………………………………….. 91
Справочные данные по MAUI XAML…………………………………………………………………….. 94
Работа с Blazor на платформе .NET MAUI………………………………………………………………………. 97
Архитектурные паттерны MAUI………………………………………………………………………………………. 99
Model-View-ViewModel……………………………………………………………………………………………… 99
Паттерны, поддерживаемые MAUI через сторонние платформы……………………………….. 101
ReactiveUI………………………………………………………………………………………………………………… 101
Model-View-Update………………………………………………………………………………………………….. 101
Использование MAUI для создания настольных приложений……………………………………………. 102
Подготовка среды разработки настольных приложений…………………………………………….. 102
Запуск настольного приложения в режиме отладки…………………………………………………….. 102
Публикация настольного приложения…………………………………………………………………………… 103
Использование MAUI для создания мобильных приложений…………………………………………….. 104
Подготовка среды разработки мобильных приложений……………………………………………… 105
Запуск мобильного приложения на эмуляторе……………………………………………………………… 106
Публикация мобильного приложения……………………………………………………………………………. 106
Ограничения разработки для Mac OS и iOS………………………………………………………………………….. 107
Дополнительные инструменты, необходимые для публикации приложений
для iOS……………………………………………………………………………………………………………………………….. 107
Менее строгие требования к приложениям для Mac OS………………………………………………. 108
Заключение………………………………………………………………………………………………………………………………. 108
Что следует помнить……………………………………………………………………………………………………………….. 109
Контрольные вопросы…………………………………………………………………………………………………………….. 109
Ответы……………………………………………………………………………………………………………………………….. 110
Основные термины…………………………………………………………………………………………………………………… 110
Глава 5. Доступ к базам данных с помощью Entity Framework 7………….. 111
Введение…………………………………………………………………………………………………………………………………… 111
Структура…………………………………………………………………………………………………………………………………. 111
Цели…………………………………………………………………………………………………………………………………………… 112
Предварительные условия………………………………………………………………………………………………………. 112
Знакомство с основами реляционных БД……………………………………………………………………………… 112
Обзор систем управления реляционными БД и SQL…………………………………………………….. 112
Таблицы, отношения и нормализация……………………………………………………………………………. 113
Введение первичных ключей…………………………………………………………………………………. 115
Нормализация и отношения внешних ключей……………………………………………………… 115
Введение в Entity Framework 7……………………………………………………………………………………………….. 117
Подход “сначала код” в EF7…………………………………………………………………………………………………… 119
Добавление кода Entity Framework………………………………………………………………………………… 119
Добавление объектов-сущностей…………………………………………………………………………………… 120
Добавление контекста базы данных………………………………………………………………………………. 122
Добавление скрипта создания базы данных…………………………………………………………………. 124
Создание базы данных путем запуска приложения……………………………………………………… 128
Подход “сначала база данных” в EF7……………………………………………………………………………………. 129
Создание моделей EF7 из существующей БД……………………………………………………………….. 129
Просмотр автоматически сгенерированного кода……………………………………………………….. 130
Новейшие функции EF7…………………………………………………………………………………………………………… 131
Подход “сначала база данных” и управление с помощью шаблонов T4…………………… 131
Защищенный ключ…………………………………………………………………………………………………………… 131
Отображение “одна таблица на конкретный тип” (TPC)……………………………………………… 133
Перехватчики……………………………………………………………………………………………………………………. 136
Заключение………………………………………………………………………………………………………………………………. 137
Что следует помнить……………………………………………………………………………………………………………….. 137
Контрольные вопросы…………………………………………………………………………………………………………….. 138
Ответы……………………………………………………………………………………………………………………………….. 139
Основные термины…………………………………………………………………………………………………………………… 139
Глава 6. Типы веб-приложений в .NET………………………………………………… 140
Введение…………………………………………………………………………………………………………………………………… 140
Структура…………………………………………………………………………………………………………………………………. 140
Цели…………………………………………………………………………………………………………………………………………… 141
Предварительные условия………………………………………………………………………………………………………. 141
Основы ASP.NET Core……………………………………………………………………………………………………………… 141
Структура базового приложения ASP.NET Core…………………………………………………………… 141
Web API в ASP.NET Core…………………………………………………………………………………………………………. 144
Web API с контроллерами……………………………………………………………………………………………….. 144
Конечные точки Minimal API………………………………………………………………………………………….. 149
Добавление метаданных Open API……………………………………………………………………….. 150
Улучшение передачи параметров в Minimal API………………………………………………… 150
Minimal API и типизированные результаты…………………………………………………………. 151
Выгрузка файлов в Minimal API…………………………………………………………………………….. 153
Новое в промежуточном ПО для обработки запросов…………………………………………………. 153
MVC в ASP.NET Core……………………………………………………………………………………………………………….. 155
Razor Pages в ASP.NET Core……………………………………………………………………………………………………. 167
Заключение………………………………………………………………………………………………………………………………. 169
Что следует помнить……………………………………………………………………………………………………………….. 170
Контрольные вопросы…………………………………………………………………………………………………………….. 170
Ответы……………………………………………………………………………………………………………………………….. 171
Основные термины…………………………………………………………………………………………………………………… 171
Глава 7. Blazor и WebAssembly в .NET………………………………………………….. 172
Введение…………………………………………………………………………………………………………………………………… 172
Структура…………………………………………………………………………………………………………………………………. 173
Цели…………………………………………………………………………………………………………………………………………… 173
Предварительные условия………………………………………………………………………………………………………. 173
Общие сведения о Blazor…………………………………………………………………………………………………………. 173
Примеры Razor-компонентов………………………………………………………………………………………….. 174
@page……………………………………………………………………………………………………………………….. 175
@onclick…………………………………………………………………………………………………………………… 175
@code……………………………………………………………………………………………………………………….. 175
Ключевые слова Razor в Razor-компонентах……………………………………………………………….. 175
@using………………………………………………………………………………………………………………………. 176
@implements……………………………………………………………………………………………………………. 176
@inherits…………………………………………………………………………………………………………………… 176
@inject……………………………………………………………………………………………………………………… 176
@layout…………………………………………………………………………………………………………………….. 176
@namespace…………………………………………………………………………………………………………….. 176
@preservewhitespace……………………………………………………………………………………………….. 177
@attributes……………………………………………………………………………………………………………….. 177
@bind……………………………………………………………………………………………………………………….. 177
@ref………………………………………………………………………………………………………………………….. 177
@typeparam…………………………………………………………………………………………………………….. 178
Обзор Blazor WebAssembly……………………………………………………………………………………………………… 178
Отделение кода программной части………………………………………………………………………………. 179
Взаимодействие с JavaScript…………………………………………………………………………………………… 181
Передача параметров в Razor-компоненты…………………………………………………………………… 182
Предварительная компиляция………………………………………………………………………………………… 183
Пустой шаблон Blazor WebAssembly……………………………………………………………………………… 184
Хостинг приложений Blazor WebAssembly в ASP.NET Core………………………………………………… 185
Добавление хостируемого приложения Blazor WebAssembly к существующему приложению ASP.NET Core 185
Проверка форм в Blazor…………………………………………………………………………………………………… 186
NavigationManager и передача состояния между страницами……………………………………. 188
Настройка Blazor Server………………………………………………………………………………………………………….. 189
Пользовательские элементы в Blazor……………………………………………………………………………… 190
Жизненный цикл Razor-компонента………………………………………………………………………………. 191
Пустой шаблон Blazor Server………………………………………………………………………………………….. 192
Заключение………………………………………………………………………………………………………………………………. 193
Что следует помнить……………………………………………………………………………………………………………….. 193
Контрольные вопросы…………………………………………………………………………………………………………….. 194
Ответы……………………………………………………………………………………………………………………………….. 194
Основные термины…………………………………………………………………………………………………………………… 195
Глава 8. SignalR и двусторонняя связь………………………………………………….. 196
Введение…………………………………………………………………………………………………………………………………… 196
Структура…………………………………………………………………………………………………………………………………. 197
Цели…………………………………………………………………………………………………………………………………………… 197
Предварительные условия………………………………………………………………………………………………………. 197
Общие сведения о библиотеке SignalR…………………………………………………………………………………… 197
WebSocket…………………………………………………………………………………………………………………………. 198
Server-Sent Events……………………………………………………………………………………………………………… 198
Длительный опрос……………………………………………………………………………………………………………. 199
Создание хаба SignalR на сервере…………………………………………………………………………………………. 199
Строго типизированный хаб…………………………………………………………………………………………… 202
Внедрение зависимостей в хаб SignalR………………………………………………………………………….. 203
JSON и MessagePack…………………………………………………………………………………………………………. 204
JavaScript-клиент для SignalR…………………………………………………………………………………………………. 204
Добавление HTML-разметки для клиента SignalR……………………………………………………….. 205
Применение функций SignalR в JavaScript……………………………………………………………………… 208
.NET-клиент для SignalR………………………………………………………………………………………………………….. 211
Заключение………………………………………………………………………………………………………………………………. 214
Что следует помнить……………………………………………………………………………………………………………….. 214
Контрольные вопросы…………………………………………………………………………………………………………….. 214
Ответы……………………………………………………………………………………………………………………………….. 215
Основные термины…………………………………………………………………………………………………………………… 215
Глава 9. gRPC в ASP.NET Core…………………………………………………………….. 216
Введение…………………………………………………………………………………………………………………………………… 216
Структура…………………………………………………………………………………………………………………………………. 216
Цели…………………………………………………………………………………………………………………………………………… 217
Предварительные условия………………………………………………………………………………………………………. 217
Общие сведения о технологии gRPC………………………………………………………………………………. 217
Protobuf как основной протокол сериализации сообщений………………………………………………… 218
Настройка сервера gRPC………………………………………………………………………………………………………… 218
Структура проекта ASP.NET Core gRPC………………………………………………………………………… 219
Типы вызовов и типы данных gRPC……………………………………………………………………………….. 221
JSON-перекодирование в gRPC……………………………………………………………………………………….. 224
Настройка клиента gRPC………………………………………………………………………………………………………… 227
Использование фабрики клиентов gRPC и внедрение зависимостей…………………………… 230
Обзор типов данных gRPC………………………………………………………………………………………………………. 232
Перечисления Protobuf…………………………………………………………………………………………………….. 233
Использование коллекций с помощью ключевого слова repeated………………………………. 234
Функциональность словаря в Protobuf…………………………………………………………………………… 234
Использование ключевого слова oneof в Protobuf………………………………………………………… 234
Общеизвестные типы данных…………………………………………………………………………………………………. 235
Заключение………………………………………………………………………………………………………………………………. 236
Что следует помнить……………………………………………………………………………………………………………….. 237
Контрольные вопросы…………………………………………………………………………………………………………….. 237
Ответы……………………………………………………………………………………………………………………………….. 238
Основные термины…………………………………………………………………………………………………………………… 238
Глава 10. Машинное обучение с помощью ML.NET…………………………….. 239
Введение…………………………………………………………………………………………………………………………………… 239
Структура…………………………………………………………………………………………………………………………………. 240
Цели…………………………………………………………………………………………………………………………………………… 240
Предварительные условия………………………………………………………………………………………………………. 240
Основы ML.NET……………………………………………………………………………………………………………………….. 240
Типы машинного обучения……………………………………………………………………………………………… 242
Обучение с учителем………………………………………………………………………………………………. 242
Обучение без учителя…………………………………………………………………………………………….. 242
Обучение с подкреплением……………………………………………………………………………………. 242
Начало работы с ML.NET………………………………………………………………………………………………. 243
Установка инструментов ML.NET………………………………………………………………………… 243
Использование ML.NET для создания первой модели МО…………………………………. 244
Выбор задачи для МО…………………………………………………………………………………………………………….. 246
Бинарная классификация………………………………………………………………………………………………… 246
Многоклассовая классификация…………………………………………………………………………………….. 248
Регрессия…………………………………………………………………………………………………………………………… 249
Рекомендации…………………………………………………………………………………………………………………… 250
Прогнозирование……………………………………………………………………………………………………………… 251
Классификация изображений…………………………………………………………………………………………. 253
Кластеризация………………………………………………………………………………………………………………….. 254
Обнаружение отклонений……………………………………………………………………………………………….. 254
Ранжирование…………………………………………………………………………………………………………………… 255
Обучение и оценка модели……………………………………………………………………………………………………… 255
Показатели бинарной классификации…………………………………………………………………………… 256
Показатели многоклассовой классификации………………………………………………………………… 256
Классификация изображений…………………………………………………………………………………………. 256
Прогнозирование……………………………………………………………………………………………………………… 257
Регрессия и рекомендации………………………………………………………………………………………………. 257
Показатели кластеризации……………………………………………………………………………………………… 257
Показатели обнаружения отклонений…………………………………………………………………………… 258
Показатели ранжирования……………………………………………………………………………………………… 258
Использование малокодового построителя моделей…………………………………………………………… 258
Заключение………………………………………………………………………………………………………………………………. 261
Что следует помнить……………………………………………………………………………………………………………….. 262
Контрольные вопросы…………………………………………………………………………………………………………….. 262
Ответы……………………………………………………………………………………………………………………………….. 263
Основные термины…………………………………………………………………………………………………………………… 263
Глава 11. Микросервисы и контейнеризация в .NET 7…………………………. 265
Введение…………………………………………………………………………………………………………………………………… 265
Структура…………………………………………………………………………………………………………………………………. 266
Цели…………………………………………………………………………………………………………………………………………… 266
Предварительные условия………………………………………………………………………………………………………. 266
Контейнеры Docker………………………………………………………………………………………………………………….. 266
Контейнеры и образы контейнеров………………………………………………………………………………… 267
Базовые образы и уровни………………………………………………………………………………………………… 267
Изоляция сети и сопоставление портов…………………………………………………………………………. 268
Изоляция файловой системы и монтирование каталогов хоста………………………………….. 268
Установка Docker в Linux………………………………………………………………………………………………… 269
Установка Docker на Mac……………………………………………………………………………………………….. 269
Установка Docker в Windows…………………………………………………………………………………………… 269
Базовый образ Docker для .NET 7…………………………………………………………………………………………… 270
Создание приложения с поддержкой Docker…………………………………………………………………. 271
Добавление поддержки Docker в существующее приложение…………………………………….. 272
Структура файла Dockerfile……………………………………………………………………………………………. 273
Создание и запуск контейнера Docker…………………………………………………………………………… 275
Оркестрация приложений с помощью Docker Swarm…………………………………………………………… 275
Базовая оркестрация помощью Docker Compose………………………………………………………….. 276
Запуск Docker Swarm……………………………………………………………………………………………………….. 278
Оркестрация приложений с помощью Kubernetes………………………………………………………………… 279
Установка Kubernetes в Linux…………………………………………………………………………………………. 279
Установка Kubernetes на Mac…………………………………………………………………………………………. 280
Добавление сервисов в кластер Kubernetes…………………………………………………………………… 281
Заключение………………………………………………………………………………………………………………………………. 282
Что следует помнить……………………………………………………………………………………………………………….. 282
Контрольные вопросы…………………………………………………………………………………………………………….. 282
Ответы……………………………………………………………………………………………………………………………….. 283
Основные термины…………………………………………………………………………………………………………………… 283
Предметный указатель…………………………………………………………………………. 285

Сазанавец Фёдор (Sazanavets Fiodar) — профессиональный инженер-программист, который широко использует программное обеспечение компании Microsoft. Основные области его специализации включают ASP.NET (Framework и Core), SQL Server, Azure, Docker, Интернет вещей (IoT), архитектуру микросервисов и различные интерфейсные технологии. Фёдор имеет большой практический опыт разработки программного обеспечения в различных отраслях, включая гидротехнику, финансы, розничную торговлю, железную дорогу и оборону. С энтузиазмом обучает других людей навыкам программирования. Автор ряда книг и курсов по программированию.
