ASP.NET 5 привносит значительные изменения в платформу ASP.NET. В этой статье рассматриваются новые концепции ASP.NET 5 и объясняется, как они помогут разрабатывать современные веб-приложения.
Введение в ASP.NET 5.
ASP.NET 5 — это лишенный всего избыточного .NET стек для построения современных веб-приложений. Мы построили его с нуля, чтобы обеспечить оптимизированную платформу для разработки приложений, которые будут развернуты в облаке или работать на собственных серверах. Для поддержки гибкости при построении решений данная платформа состоит из модульных компонентов с минимальными накладными расходами.
ASP.NET 5 включает в себя следующие возможности:
Новая гибкая и кроссплатформенная среда выполнения
Новый модульный конвейер для HTTP-запросов
Конфигурация готовая к использованию в облаке
Унифицированная программная модель, которая сочетает в MVC, Web API и Web Pages
Возможность увидеть изменения без повторного построения проекта
Использование нескольких версий .NET Framework бок о бок
Изменения, которые мы сделали для ASP.NET 5 были основаны на запросах клиентов и обратной связи. Эти изменения упрощают разработку, хостинг и обслуживание и ориентированы на современные веб-приложения.
Ваши унаследованные приложения будут работать на новой версии ASP.NET без каких-либо модификаций. Но чтобы воспользоваться новыми возможностями в ASP.NET 5, необходимо портировать существующий код на новый фреймворк. Вы найдете много сходства между ASP.NET 5 и более ранними версиями ASP.NET, так что портирование кода заключается в фиксации конкретных проблемных мест, а не переписывании всего приложения.
В этом статье представлены направление развития ASP.NET 5 и объяснение изменений.
Скачать Visual Studio 2015 Preview
Можно уже начать работать с ASP.NET 5, загрузив Visual Studio 2015 Preview. Для получения дополнительной информации о том, что включено в этот выпуск, читайте Visual Studio 2015 Preview.
Необходимость гибкой кросс-платформенной среды выполнения
В прошлом .NET Framework использовался в качестве единой, всеобъемлющей установки. В каждым новый релиз .NET, добавлялись новые фичи, но старые редко удалялись, таким образом, размер фреймворка постоянно рос. Такой подход гарантирует, что машина с установленным .NET может поддерживать любой тип .NET приложений, но это означает, что каждое приложение имеет зависимость от функционала, который фактически не используется.
Если критическое обновление необходимо для одной из технологий в .NET, вы получаете уведомление, что доступно важное обновление, даже если эта часть .NET не используется вашими приложениями. Необходимо решать, следует ли установить это обновление и прерывать работу приложения или игнорировать обновления, в надежде, что обновление на самом деле не нужно.
ASP.NET 5 дает большую гибкость, будучи в состоянии работать в трех вариантах среды выполнения:
Full .NET CLR
Full .NET CLR — среда выполнения по умолчанию для проектов в Visual Studio. Она обеспечивает весь набор API и это лучший выбор для обратной совместимости.
Core CLR (оптимизированная для облака среда выполнения, cloud-optimized runtime)
Core CLR — среда выполнения для проектов ASP.NET 5. Она избавлена от всего лишнего и является полностью модульной. Эта CLR была переделана на компонентную модель, теперь есть возможность включить только те функции, которые нужны в вашем приложении. Вы просто добавляете компоненты как NuGet пакеты. В итоге, ваше приложение зависит только от необходимых функций. При таком подходе к разработке среды выполнения, мы можем доставлять обновления компонентов быстрее, потому что каждый компонент обновляется по собственному расписанию. Core CLR занимает около 11 мегабайт вместо около 200 мегабайт для полной версии .NET CLR. Core CLR может быть развернута непосредственно с вашим приложением и различные версии Core CLR могут работать бок о бок (оба эти преимущества описаны более подробно ниже).
Кросс-платформенная среда CLR
Мы выпустим кросс-платформенную среду выполнения для Linux и Mac OS X. Эта среда выполнения позволит разрабатывать и запускать .NET-приложения на Mac и Linux устройствах. Мы работаем в тесном сотрудничестве с сообществом Mono. До релиза вы можете использовать Mono CLR для кросс-платформенной разработки. Для получения дополнительной информации см Разработка приложений ASP.NET vNext на Mac.
По умолчанию, новые проекты Visual Studio будут использовать Full .NET CLR. Вы можете указать Core CLR в свойствах конфигурации вашего проекта.
Хостинг в любом месте
ASP.NET 5 позволяет размещать свое приложение на IIS или в режиме self hosting. Когда вы используете Core CLR, вы можете развернуть приложение со всеми зависимостями собранными в пакет развертывания. Таким образом, приложение и его зависимости полностью автономны и больше не зависят от установки .NET в системе. Приложение может работать на любом типе устройства или хостинговой платформы.
Эта новая возможность дает много свободы. Мы по-прежнему рекомендуем IIS как лучший вариант для хостинга, но вы можете, если потребуется, использовать другую хостинговую платформу. Настройки вашего хостинга более не определяют, какой фреймворк использовать для разработки и наоборот.
Когда приложения на сервере зависят от одной, общесистемной установки .NET Framework, все приложения работают на одной и той же версии .NET. Эта ситуация создает некоторое беспокойство при рассмотрении вопроса обновления до новой версии платформы .NET Framework. Возможно, вы хотите чтобы, некоторые из ваших приложений использовали последнюю версию .NET, но вы не уверены в том, что все ваши старые приложения будут работать должным образом с новой версией.
К счастью, ASP.NET 5 исправляет эту проблему. Можно определить зависимости в рамках пакета развертывания и указать версию .NET для каждого приложения. Вы получаете все преимущества последней версии для некоторых приложений и просто продолжаете использовать старую версию для остальных. Все эти различные версии работают бок о бок без каких-либо проблем. Для запуска приложений с разными версиями бок о бок, вы должны выбрать целевой объект (target) Core CLR для них.
Упрощение управления зависимостями
ASP.NET 5 представляет новый, легкий способ управлять зависимостями в ваших проектах. Вам больше не надо добавлять референсы на сборки в проект, вместо этого вы управляете зависимостями, ссылаясь на NuGet пакеты. Вы можете добавить NuGet пакеты с помощью менеджера NuGet пакетов или вы можете отредактировать файл JSON (project.json), в котором перечислены NuGet пакеты и версии, используемые в вашем проекте. Для добавления других зависимостей, вы просто пишите имя и номер версии NuGet пакета в файл project.json.
В Visual Studio 2015 IntelliSense помогает найти доступные NuGet пакеты.
Файл project.json включает только NuGet пакеты, которые были непосредственно добавлены в проект. Если добавить NuGet пакет, который зависит от других пакетов, эти вторичные зависимости загружаются, но не перечислены в файле project.json. Этот подход позволяет сохранить файл project.json не загроможденным и простым в управлении. Если удалить NuGet-пакет из project.json, вторичные зависимости удаляются тоже, если нет других пакетов которым они нужны.
Благодаря формату JSON управлять зависимостями легко, даже если нет установленной Visual Studio. Вы можете открыть файл project.json в любом текстовом редакторе и внести изменения, например, обновить зависимости приложения, развернутого в облаке.
Устранение дублирования в MVC, Web API и Web Pages
В прошлом MVC, Web API и Web Pages содержали различные реализации схожего функционала. Например, MVC и Web API предоставляют маршрутизацию, но классы маршрутизации MVC располагаются в пространстве имен System.Web.Mvc.Routing, а схожие классы Web API располагаются в System.Web.Http.Routing. Или, Web Pages и MVC и используют синтаксис Razor, но некоторые NuGet пакеты совместимы только с одной или другой реализацией.
В ASP.NET 5, MVC, Web API и веб-страниц будут объединены в единый фреймворк под названием MVC 6. Это слияние удаляет дублирования из фреймворка и делает разработку приложений более легким. Вам больше не нужно писать несколько иной код в зависимости от того, используется ли MVC, Web API или Web Pages.
В этой предварительной версии, MVC и Web API были объединены в MVC 6. Web Pages будут добавлены в MVC 6 в более поздней версии.
Повышение производительности HTTP
ASP.NET 5 вводит новый программный конвейер для HTTP-запросов, который избавлен от всего лишнего. Этот конвейер является модульным, можно добавить только те компоненты, которые необходимы. Приложение будет иметь бОльшую пропускную способность за счет снижения накладных расходов. Новый конвейер также поддерживает Owin.
Готовность к использованию в облаке
Когда вы создаете новый ASP.NET 5 проекта, этот проект структурируется для легкого развертывания в облаке. Visual Studio 2015 предоставляет новую систему конфигурации среды, которая заменяет файл Web.config. Новая система позволяет запрашивать именованные значения из различных источников (например, JSON, XML или переменные среды). Вы указываете значения для каждой среды, и после развертывания ваше приложение просто читает корректные значения.
Мы также предоставляем инструменты для диагностики и трассировки, которые упрощают обнаружение проблем приложений в облаке.
Интеграция инъекций зависимостей
Внедрение зависимостей встроено в ASP.NET 5. Вы можете использовать свой IoC-контейнер для регистрации зависимостей. Зависимость инъекции облегчает предоставление правильных сервисов для среды использования. Для получения дополнительной информации см Dependecy Injection in ASP.NET vNext.
Открыть исходный код и сделать прозрачным
Весь код для ASP.NET 5 доступен на GitHub. Мало того, что код доступен, мы используем репозитории GitHub для всей нашей разработки. Вы можете увидеть, какие именно изменения были внесены и когда они были сделаны. Вы можете скачать код и предоставить изменения.
Развивая ASP.NET 5 в GitHub, мы облегчаем понимание кода и нашего предполагаемого развития. Вы можете предлагать свои правки или разрабатывать кастомную реализацию ASP.NET.
Обеспечить гибкую среду разработки
Visual Studio 2015 предлагает легковесный подход к разработке ASP.NET приложений. Вы просто вносите изменения в код, сохраняете изменения и обновляете страницу в браузере. Вы увидите изменения браузере без повторного построения проекта.
Вы можете менять код веб-проекта или код библиотеки классов, на который ссылается проект. Вы можете запустить (CTRL + F5) проект, а не быть в режиме отладки, чтобы увидеть изменения.
Visual Studio использует компилятор Roslyn для динамической компиляции. Вам по-прежнему доступна вся мощь компилируемого фреймворка, но при разработке создается ощущение использования интерпретируемого языка.
Каждой функции в графическом интерфейсе Visual Studio соответствует операция командной строки. Вы можете легко переключаться между использованием интерфейса и написанием скриптов в командной строке.
Наконец, можете использовать другие редакторы кода для проектов на ASP.NET 5.
Что с Web Forms?
Вы можете продолжить разработку приложения с использованием Web Forms и быть в полной уверенности, что Web Forms являются неотъемлемой частью платформы веб-разработки .NET. Мы по-прежнему сфокусированы на добавлении новых фич для Web Forms, чтобы опыт разработки соответствовал современным веб-практикам.
Web Forms 4.6 включает в себя следующие новые возможности:
HTTP 2
Асинхронная модель связывания
Roslyn CodeDOM компиляторы
Существующие Web Forms приложения будут продолжать работать без изменений на IIS с .NET 4.6. Вы не можете использовать Web Forms-приложения с Core CLR.
По ссылке доступно видео о новых возможностях в Web Forms 4.6. Описание множества изменений для Web Forms в Visual Studio 2013 Update 2, смотрите Improvements to ASP.NET Web Forms.
Что насчет старых приложений?
Возможно, вы обеспокоены тем, что с таким количеством изменений в ASP.NET 5, теперь нужно будет переписать все ваши приложения? Не волнуйтесь. Построенные на более ранних версиях ASP.NET приложения будут продолжать работать с новым .NET Framework. Вам не нужно обновлять или портировать эти приложения, если вам не нужны новые возможности ASP.NET 5.
Например, ваши приложения, которые в настоящее время используют Web Forms, MVC 5, Web API 2, SignalR 2, Web Pages 3 или Entity Framework 6 полностью поддерживаются в новом фреймворке без изменений. Однако, необходимо использовать полный .NET CLR для запуска старых приложений, потому что только в этом CLR обеспечена полную совместимость с более ранними версиями.
Core CLR имеет несколько ограниченное API. Для использования Core CLR, приложение должно использовать только те типы и члены, которые доступны в этой среде выполнения.
Чтобы убедиться, что ваше приложение может работать в среде выполнения Core CLR, используйте API Portability Analyzer. Этот инструмент говорит вам, на каких платформах может быть запущено ваше приложение и какие зависимости блокируют запуск приложения на других платформах. Это поможет вам понять масштабы необходимых изменений и предлагает новые типы или члены для замены неподдерживаемых.
Приложения MVC 6 и SignalR 3 используют новый конвейер HTTP, поэтому они не совместимы с приложениями, которые используют System.Web. Чтобы обновить существующее приложение до MVC 6 или SignalR 3, вы должны создать новый проект в Visual Studio 2015, а затем перенести код в новый проект. При переносе, то вам нужно изменить неподдерживаемый код.