Опубликовано

Новинка: “C# 11 и .NET 7.0”

C# 11 и .NET 7.0

Книга о разработке нативных, крос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), архитектуру микросервисов и различные интерфейсные технологии. Фёдор имеет большой практический опыт разработки программного обеспечения в различных отраслях, включая гидротехнику, финансы, розничную торговлю, железную дорогу и оборону. С энтузиазмом обучает других людей навыкам программирования. Автор ряда книг и курсов по программированию.

Summary
Aggregate Rating
3.5 based on 2 votes
Добавить комментарий