Введение в ASP.NET Core
ASP.NET Core представляет технологию для создания веб-приложений на платформе .NET, развиваемую компанией Microsoft. В качестве языков программирования для разработки приложений на ASP.NET Core используются C# и F#.
История ASP.NET фактически началась с выходом первой версии .NET в начале 2002 года и с тех пор ASP.NET и .NET развивались параллельно: выход новой версии .NET знаменовал выход новой версии ASP.NET, поскольку ASP.NET работает поверх .NET. В то же время изначально ASP.NET была нацелена на работу исключительно в Windows на веб-сервере IIS (хотя благодаря проекту Mono приложения на ASP.NET можно было запускать и на Linux).
Однако 2014 год ознаменовал большие перемены, фактически революцию в развитии платформы: компания Microsoft взяла курс на развитии ASP.NET как кроссплатформенной технологии, которая развивается как opensource-проект. Данное развитие платформы в дальнейшем получило название ASP.NET Core , собственно как ее официально именут Microsoft до сих пор. Первый релиз обновленной платформы увидел свет в июне 2016 года. Теперь она стала работать не только на Windows, но и на MacOS и Linux. Она стала более легковесной, модульной, ее стало проще конфигурировать, в общем, она стала больше отвечать требованиям текущего времени.
Текущая версия ASP.NET Core, которая собственно и будет охвачена в текущем руководстве, вышла вместе с релизом .NET 8 в ноябре 2023 года.
ASP.NET Core теперь полностью является opensource-фреймворком. Все исходные файлы фреймворка доступны на github в репозитории https://github.com/dotnet/aspnetcore/.
Архитектура и модели разработки
Текущую архитектуру платформы ASP.NET Core можно выразить следующим образом:

На самом верхнем уровне располагаются различные модели взаимодействия с пользователем. Это технологии построения пользовательского интерфейса и обработки ввода пользователя, как MVC, Razor Pages, SPA (Single Page Application — одностраничные приложения с использованием Angular, React, Vue) и Balzor. Кроме того, это сервисы в виде встроенных HTTP API, библиотеки SignalR или сервисов GRPC.
Все эти технологии базируются и/или взаимодействуют с чистым ASP.NET Core, который представлен прежде всего различными встроенными компонентами middleware — компонентами, которые применяются для обработки запроса. Кроме того, технологии высшего уровня также взаимодействуют с различными расширениями, которые не являются непосредственной частью ASP.NET Core, как расширения для логгирования, конфигурации и т.д.
И на самом нижнем уровне приложение ASP.NET Core работает в рамках некоторого веб-сервера, например, Kestrel, IIS, библиотеки HTTP.sys.
Это вкратце архитектура платформы, теперь рассмотрим моделей разработки приложения ASP.NET Core:

- Прежде всего это базовый ASP.NET Core , который поддерживает все основные моменты, необходимые для работы соввременного веб-приложения: маршрутизация, конфигурация, логгирования, возможность работы с различными системами баз данных и т.д.. В ASP.NET Core 6 в фреймворк был добавлен так называемый Minimal API — минимизированная упрощенная модель, который еще упростила процесс разработки и написания кода приложения. Все остальные модели разработки работаю поверх базового функционала ASP.NET Core
- ASP.NET Core MVC представляет в общем виде построения приложения вокруг трех основных компонентов — Model (модели), View (представления) и Controller (контроллеры), где модели отвечают за работу с данными, контроллеры представляют логику обработки запросов, а представления определяют визуальную составляющую.
- Razor Pages представляет модель, при котором за обаботку запроса отвечают специальные сущности — страницы Razor Pages. Каждую отдельную такую сущность можно ассоциировать с отдельной веб-страницей.
- ASP.NET Core Web API представляет реализацию паттерна REST, при котором для каждого типа http-запроса (GET, POST, PUT, DELETE) предназначен отдельный ресурс. Подобные ресурсы определяются в виде методов контроллера Web API. Данная модель особенно подходит для одностраничных приложений, но не только.
- Blazor представляет фреймворк, который позволяет создавать интерактивные приложения как на стороне сервера, так и на стороне клиента и позволяет задействовать на уровне браузера низкоуровневый код WebAssembly.
Особенности платформы
- ASP.NET Core работает поверх платформы .NET и, таким образом, позволяет задействовать весь ее функционал.
- В качестве языков разработки применяются языки программирования, поддерживаемые платформой .NET. Официально встроенная поддержка для проектов ASP.NET Core есть у языков C# и F#
- ASP.NET Core представляет кросс-платформенный фреймворк, приложения на котором могут быть развернуты на всех основных популярных операционных системах: Windows, Mac OS, Linux. И таким образом, с помощью ASP.NET Core мы можем как создавать кросс-платформенные приложения на Windows, на Linux и Mac OS, так и запускать на этих ОС.
- Благодаря модульности фреймворка все необходимые компоненты веб-приложения могут загружаться как отдельные модули через пакетный менеджер Nuget.
- Поддержка работы с большинством распространенных систем баз данных: MS SQL Server, MySQL, Postgres, MongoDB
- ASP.NET Core характеризуется расширяемостью. Фреймворк построен из набора относительно независимых компонентов. И мы можем либо использовать встроенную реализацию этих компонентов, либо расширить их с помощью механизма наследования, либо вовсе создать и применять свои компоненты со своим функционалом.
- Богатый инструментарий для разработки приложений. В качестве инструментария разработки мы можем использовать такую среду разработки с богатым функционалом, как Visual Studio от компании Microsoft. Также можно использовать для разработки среду Rider от компании JetBrains. Кроме того, имеющаяся оснастка .NET CLI позволяет созадвать и запускать проекты ASP.NET в консоли. И таким образом, для написания кода можно использовать обычных текстовый редактор, например, Visual Studio Code .
Введение в ASP.NET Core
Платформа ASP.NET Core представляет технологию от компании Microsoft, предназначенную для создания различного рода веб-приложений: от небольших веб-сайтов до крупных веб-порталов и веб-сервисов.
С одной стороны, ASP.NET Core является продолжением развития платформы ASP.NET. Но с другой стороны, это не просто очередной релиз. Выход ASP.NET Core фактически означает революцию всей платформы, ее качественное изменение.
Разработка над платформой началась еще в 2014 году. Тогда платформа условно называлась ASP.NET vNext. В июне 2016 года вышел первый релиз платформы. А в ноябре 2020 года вышла версия ASP.NET Core 5.0, которая собственно и будет охвачена в текущем руководстве.
ASP.NET Core теперь полностью является opensource-фреймворком. Все исходные файлы фреймворка доступны на GitHub.
ASP.NET Core может работать поверх кросс-платформенной среды .NET Core, которая может быть развернута на основных популярных операционных системах: Windows, Mac OS, Linux. И таким образом, с помощью ASP.NET Core мы можем создавать кросс-платформенные приложения. И хотя Windows в качестве среды для разработки и развертывания приложения до сих пор превалирует, но теперь уже мы не ограничены только этой операционной системой. То есть мы можем запускать веб-приложения не только на ОС Windows, но и на Linux и Mac OS. А для развертывания веб-приложения можно использовать традиционный IIS, либо кросс-платформенный веб-сервер Kestrel.
Благодаря модульности фреймворка все необходимые компоненты веб-приложения могут загружаться как отдельные модули через пакетный менеджер Nuget. Кроме того, в отличие от предыдущих версий платформы нет необходимости использовать библиотеку System.Web.dll.
ASP.NET Core включает в себя фреймворк MVC, который объединяет функциональность MVC, Web API и Web Pages. В предыдущих версии платформы данные технологии реализовались отдельно и поэтому содержали много дублирующей функциональности. Сейчас же они объединены в одну программную модель ASP.NET Core MVC. А Web Forms полностью ушли в прошлое.
Кроме объединения вышеупомянутых технологий в одну модель в MVC был добавлен ряд дополнительных функций.
Одной из таких функций являются тэг-хелперы (tag helper), которые позволяют более органично соединять синтаксис html с кодом С#.
ASP.NET Core характеризуется расширяемостью. Фреймворк построен из набора относительно независимых компонентов. И мы можем либо использовать встроенную реализацию этих компонентов, либо расширить их с помощью механизма наследования, либо вовсе создать и применять свои компоненты со своим функционалом.
Также было упрощено управление зависимостями и конфигурирование проекта. Фреймворк теперь имеет свой легковесный контейнер для внедрения зависимостей, и больше нет необходимости применять сторонние контейнеры, такие как Autofac, Ninject. Хотя при желании их также можно продолжать использовать.
В качестве инструментария разработки мы можем использовать последние выпуски Visual Studio, начиная с версии Visual Studio 2015. Кроме того, мы можем создавать приложения в среде Visual Studio Code, которая является кросс-платформенной и может работать как на Windows, так и на Mac OS X и Linux.
Для обработки запросов теперь используется новый конвейер HTTP, который основан на компонентах Katana и спецификации OWIN. А его модульность позволяет легко добавить свои собственные компоненты.
Если суммировать, то можно выделить следующие ключевые отличия ASP.NET Core от предыдущих версий ASP.NET:
- Новый легковесный и модульный конвейер HTTP-запросов
- Возможность развертывать приложение как на IIS, так и в рамках своего собственного процесса
- Использование платформы .NET Core и ее функциональности
- Распространение пакетов платформы через NuGet
- Интегрированная поддержка для создания и использования пакетов NuGet
- Единый стек веб-разработки, сочетающий Web UI и Web API
- Конфигурация для упрощенного использования в облаке
- Встроенная поддержка для внедрения зависимостей
- Расширяемость
- Кроссплатформенность: возможность разработки и развертывания приложений ASP.NET на Windows, Mac и Linux
- Развитие как open source, открытость к изменениям
Эти и другие особенности и возможности стали основой для новой модели программирования.
Что такое .NET Core?


Одна из существенных причин головной боли программистов — непредсказуемость условий, в которых будут запускаться написанные ими приложения. — Разная конфигурация аппаратной части, разные версии операционных систем, разные наборы библиотек, разные устройства, разные драйверы, … Попытки как-то унифицировать среду выполнения приложений предпринимались, предпринимаются и будут предприниматься. Мощной и довольно успешной попыткой унификации программной среды в операционной системе Windows является платформа .NET («дот нет»), разработанная компанией Microsoft в начале 2000-х годов. Основная идея состояла в том, чтобы между операционной системой и приложением поместить программную прослойку, которая сглаживала бы особенности конкретного экземпляра операционной системы, обеспечивая приложению «идеальную» среду исполнения. В рамках статьи мы не будем углубляться в технические детали этой прослойки. Желающие могут обратиться к её технической документации. Очень упрощённо устройство .NET можно проиллюстрировать следующим рисунком.
Открытость

Как уже было сказано, платформа .NET является разработкой и собственностью компании Microsoft, но была и остаётся бесплатной в использовании. В 2014 году для дальнейшей популяризации этой платформы была учреждена независимая организация: .NET Foundation. Программный код платформы был размещён в публичном репозитории GitHub и теперь распространяется как продукт с открытым исходным кодом.
Кроссплатформенность

Плохо ли, хорошо ли, но в компьютерном мире существует много разных операционных систем. Сегодня на потребительском рынке наиболее распространены три: Windows, macOS и Linux (с вариациями). Разработчик удачного, востребованного пользователями приложения заинтересован в его распространении в разных операционных системах. Однако в большинстве случаев просто так запустить приложение, разработанное для другой операционной системы, невозможно — требуется его «портировать». В каких-то ситуациях можно просто перекомпилировать исходный текст программы для новой операционной системы. Но в большинстве случаев такой трюк не проходит, и требуется переписывать программу целиком или какие-то её части. Именно так пришлось действовать компании Microsoft, когда в середине 90-х она захотела сделать свой Office доступным в MacOS. Но адаптации исходного кода приложения можно избежать, если между ним и операционной системой будет находиться «стандартизирующая» прослойка. Например, … .NET. Тогда приложение, разработанное в одной операционной системе, можно будет без проблем запускать в другой. То есть вместо портирования отдельных приложений, можно портировать саму программную прослойку. Так Microsoft и поступила. Правда, портировала она не текущую версию платформы .NET, существующую в ОС Windows, а некую производную от неё, которую назвала .NET Core. В значительной степени её функциональность совпадает с функциональностью исходной .NET, но одновременно — в чём-то шире, а в чём-то уже. В целом, можно считать, что .NET и .NET Core совместимы друг с другом.
Несколько слов о .NET Core

Сейчас платформа .NET Core существует для трёх операционных систем: Windows, Linux и macOS. То есть приложение, разработанное на базе .NET Core, может быть без изменения запущено во всех операционных системах, в которых имеется указанная платформа. Не будем лукавить, идеальная 100-процентная совместимость трудно достижима. В настоящее время на платформе .NET Core не реализованы Windows Forms, Windows Presentation Foundation (WPF), WebForms. Это означает, что приложения с развитым графическим интерфейсом портироваться таким способом в настоящее время не могут. Однако в информационных системах существует много задач, решение которых не требует пользовательского графического интерфейса.
А зачем что-то портировать?

Этот вопрос совсем не праздный. Ведь любые прослойки и надстройки снижают эффективность работы приложения. Они добавляют к нему программный код, который нужно исполнять и тратить дополнительное время. Кроме того, для своей устойчивой работы дополнительный код проектируется максимально универсальным, что также снижает его эффективность. Что же подталкивает разработчиков переносить свои наработки в новую среду, вместо того, чтобы написать там новый «чистый» код с нуля?
Скорость разработки

Самые «быстрые» программы пишутся в машинных кодах. Точнее, на языке ассемблера, максимально приближенном к командам конкретного процессора. Этот язык используется и сейчас при разработке низкоуровневых системных элементов, например, драйверов разных устройств. Однако решать таким способом высокоуровневые задачи абсолютно нереально. — Требуется агрегировать! Ведь при разработке автомобиля или холодильника никто двигатели заново не проектирует, а применяет подходящие из имеющихся в ассортименте, предлагаемом контрагентами. Использование в программирование готовых элементов из ранее разработанных библиотек — обычная и правильная практика. Да, это снижает удельную эффективность программного кода, но позволяет решать сложные прикладные задачи в разумные сроки. Побочное снижение эффективности кода с лихвой перекрывается продолжающимся ростом быстродействия вычислительной техники, повышением архитектурной гибкости и устойчивости приложений, возможностью групповой разработки. Чем больше готовых агрегатов вы сможете использовать в своём проекте, тем быстрее он будет реализован.
Зрелость технологии

Уже в течение долгого периода компьютерный мир развивается колоссальными темпами. Во многом это связано с модульностью его устройства. Его элементы разрабатываются большим числом специалистов параллельно. В любой текущий момент времени какие-то технологии уже достигли определённого совершенства, а другие — только зарождаются. Причём, степень зрелости одной и той же технологии в разных операционных системах может быть существенно разной. В качестве примера такого асинхронного развития можно привести контейнеры приложений. Они доступны и в Windows, но исторически раньше возникли в ОС Linux, и там они более отработаны. Там их экосистема сейчас более развита. Контейнеры широко применяются при реализации концепции микросервисов. Если ваши приложения, которые вы хотите использовать в режиме микросервисов, были изначально разработаны в Windows на основе .NET, у вас может возникнуть мысль упаковать их в контейнеры и запускать в Linux.
Опыт разработчиков

Есть ещё один, возможно, неожиданный фактор, влияющий на целесообразность портирования приложений в другую операционную систему. — Это накопленный опыт разработчиков. Да, конечно, люди способны к обучению и переобучению. Но и то, и другое требует времени, а значит и расходов. Если нужно быстро воспроизвести функциональность, уже реализованную в другой операционной системе, можно либо сформировать новую команду разработчиков, либо воспользоваться средствами портирования приложения. Достаточно очевидно, что при наличии необходимых средств портирование будет намного быстрее и экономические эффективнее.
Заключение
- Идеальная среда разработки
- В чём суть контейнеров приложений?
- Масштабирование в облаке
- Переезд в облако
- Считайте облако необлаком
Что такое .NET Core? Блог 2018-06-15 ru
.NET Core
.NET Core — это универсальная платформа разработки, которая поддерживается корпорацией Майкрософт и сообществом .NET на сайте GitHub. Она является кроссплатформенной: поддерживает Windows, Mac OS и Linux. Имеет открытый исходный код: распространяется по лицензиям MIT и Apache 2.
Начиная с .NET 5, версии называются .NET (без «Core» в названии), что символизирует объединение .NET Core, Mono и .NET Framework. Также в этой версии появилась поддержка архитектур Arm — Arm32 (armh, armv7) и Arm64 (aarch64, armv8).
Платформа .NET Core является кроссплатформенным аналогом .NET Framework на уровне библиотек базовых классов (BCL) .NET Framework. Она реализует спецификацию библиотеки .NET Standard.
Важным отличием от проекта Mono, который направлен на создание свободной среды, совместимой с .NET Framework, является то, что .NET Core не имеет реализации Windows Forms и не реализует API .NET Framework с использованием тех же имён сборок, то есть не позволяет запускать приложения, собранные для .NET Framework.
Для ALT p9, p10 и Sisyphus собран .NET 6, соответствующий спецификации .NET Standard 2.1.
В составе SDK поставляется компилятор C# с открытым исходным кодом из состава .NET Compiler Platform — Roslyn.
В качестве среды разработки удобно использовать Visual Studio Code (см. подробнее по ссылке), для которого имеется расширение, позволяющее отлаживать приложения, написанные на C# под .NET Core на Linux.
- 1 Установка
- 2 Создание приложения «Hello, world!»
- 2.1 Вывод команд
Установка
Для установки среды выполнения (CoreCLR) с необходимыми библиотеками установите мета-пакет dotnet:
apt-get install dotnet
Для разработки приложений установите SDK для .NET Core (пакет dotnet-sdk):
apt-get install dotnet-sdk
Создание приложения «Hello, world!»
(Необходимо иметь в домашнем каталоге >2 ГБ свободного места)
dotnet new console -o hwapp cd hwapp dotnet restore dotnet build dotnet run
Вывод команд
$ dotnet new console -o hwapp Welcome to .NET Core! --------------------- Learn more about .NET Core @ https://aka.ms/dotnet-docs. Use dotnet --help to see available commands or go to https://aka.ms/dotnet-cli-docs. Telemetry -------------- The .NET Core tools collect usage data in order to improve your experience. The data is anonymous and does not include command-line arguments. The data is collected by Microsoft and shared with the community. You can opt out of telemetry by setting a DOTNET_CLI_TELEMETRY_OPTOUT environment variable to 1 using your favorite shell. You can read more about .NET Core tools telemetry @ https://aka.ms/dotnet-cli-telemetry. Configuring. ------------------- A command is running to initially populate your local package cache, to improve restore speed and enable offline access. This command will take up to a minute to complete and will only happen once. Decompressing 100% 7675 ms Expanding 100% 14205 ms Getting ready. The template "Console Application" was created successfully. Processing post-creation actions. Running 'dotnet restore' on hwapp/hwapp.csproj. Restore succeeded. $ cd hwapp $ dotnet run Hello World!
Основные команды
Всё взаимодействие с .NET Core из командной строки осуществляется через команду
$ dotnet
Для запуска приложения:
$ dotnet программа
Для запуска команды управления пакетами NuGet:
$ dotnet nuget
Для скачивания и подготовки всех необходимых для сборки проекта пакетов:
$ dotnet restore
$ dotnet msbuild
Для запуска тестов MSTest или xUnit:
$ dotnet test
Диагностика
$ dotnet run --verbosity diag
Desktop-приложения
Сама по себе платформа .NET Core покрывает и поддерживает только модель консольных приложений и приложений ASP.NET Core. Реализация WPF (Windows Presentation Foundation) отсутствует для платформы Linux.
В настоящее время (июль 2017) шаги к портированию WPF на .NET Core заключаются в обсуждении стандарта XAML Standard, которым описываются UI-элементы, чтобы появилась возможность реализовать System.XAML. После чего возникнет теоретическая возможность портировать/реализовать WPF поверх .NET Core.
ASP.NET
Частью ASP.NET Core является кросс-платформенный веб-сервер KestrelHttpServer.
- Начинаем работать с ASP.NET Core.
- ASP.NET 5 мёртв — представляем ASP.NET Core 1.0 и .NET Core 1.0
Установить пакет dotnet-aspnetcore
apt-get install dotnet-aspnetcore
$ mkdir aspnetcoreapp $ cd aspnetcoreapp $ dotnet new web $ dotnet run
Если требуется доступ отовсюду, то запускаем так
Однако, по рекомендации MS, если приложение смотрит в Интернет, нужно использовать обратный прокси-сервер (IIS, Nginx или Apache).
Особенности
- Поддерживается только 64-битная платформа (x86_64).
- В настоящий момент nuget нормально не поддерживает работу в оффлайн-режиме (с предварительно подготовленным кэшем), и даже с использованием локального репозитория есть проблемы.
ARM
Ссылки
- Архитектурные компоненты .NET
- .NET Core
- .NET Cli для начинающих
- публикация приложения
- Перенос кода в .NET Core из .NET Framework
- Представлен .NET 5 (релиз в ноябре 2020 года)
Исходный код
- dotnet/runtime — содержит .NET Core runtime, называемый CoreCLR и базовую библиотеку (mscorlib) с низкоуровневыми классами и базовыми типами данных.
- dotnet/sdk — исходный код команд, касающихся сборки проекта (таких, как ‘dotnet build’, ‘dotnet restore’ и ‘dotnet publish’).
- corewf — неофициальный порт Windows Workflow Foundation на .NET (без XAML не работает) (состояние портирования)
- referencesource — исходный код части модулей .NET Framework 4.7 (для сверки)