asp.net 5 (известный как vnext), и почему там всё по-другому
TRANSCRIPT
ASP.NET 5ex. ASP.NET vNext
Андрей Кулешов
ASP.NET 5 (бывший vNext)
▪ История революции и предательства
▪ Что произошло в процессе переворота
▪ Как жить дальше в мире ASP.NET 5
▪ Про .NET Framework, .NET Core и про то, как сидеть сразу на двух стульях
Порубили▪ System.Web.dll
▪ Жёсткую привязку к IIS OS Windows
▪ *.csproj
▪ Web.config (на самом деле, нет)
▪ ASP.NET Web Forms (хотя их усиленно обещают добавить)
Добавили▪ Популярные в OpenSource-мире инструменты FrontEnd-разработки
Именовано:node.js – собственно, Node.jsnpm – пакеты для Node.js – серверный JSbower – пакеты для клиенсткой разработки – клиентский JSgrunt / gulp – билдёжные системы, основанные на JS
▪ Roslyn - с обещанием скорости и «компиляции на лету»(на моей машине не работает до сих пор)
▪ Tag Helpers
▪ Dependency Injection из коробки
▪ wwwroot
▪ project.json
Оставили▪ MVC
Model View (Razor) Controller
▪ WebAPI (влили в MVC)
▪ NuGet пакеты (с улучшениями, но и с оговорками)
Новая среда исполнения.NET FrameworkМонолитность
.NET CoreМодульность
Фреймворки и рантаймы...▪ .NET Framework
▪ .NET Core
▪ При работе в VS - компилируются одновременно, из командной строки – выбираем тот рантайм, с которым будем работать
▪ Конфигурируются независимо
"frameworks": { "dnx451": { }, "dnxcore50": { }}
Утилиты командной строки K* DN*DNVM – .NET Version ManagerУправляет списками доступных дефолтных рантаймов
dnvm upgrade
DNU - .NET Utility
Помогает в процессе разработки. Сбилдить, запаковать, перезакачать зависимости...
dnu restore
DNX - .NET Execution Environment
dnx . build
Один Ctrl+Shift+B = два набора DLL▪ Компилирует одновременно и под .NET Framework, и под .NET Core
(то есть сейчас в Error List могут быть ошибки, но приложение скомпилится и будет работать – потому что ошибки из другой DLL)
▪ Некоторые куски C# кода могут быть разными, и это by design – разные зависимости, иногда – разные классы, реализующие нужный функционал
▪ Используется условная компиляция
Один код – берётся из разных мест▪ Ну, это если вам повезёт.
▪ Если не повезёт – вы будете писать директивы условной компиляции
#if DNX451
var x = System.Reflection.Assembly.GetExecutingAssembly();
#endif
NuGet-пакеты▪ Основной и единственный способ зависимостей на .NET-
библиотеки
▪ А вот ставить клиентские библиотеки с файликами в vNext теперь нельзя.Только Bower, только хардкор
▪ NuGet сильно доточили, поменяли UI, поменяли сервисную часть, перейдя с XML-протокола на JSON, что-то улучшив/убыстрив и сломав к чертям все старые подходы
Уходит Уменьшается понятие ReferenceПоявляется понятие Dependency(Мы пока говорим НЕ о Dependency Injection!Мы говорим о зависимости от .NET-библиотеки!)
▪ «Зависимостью» может быть либо проект в том же солюшене (solution)
▪ Либо NuGet-пакет
▪ Либо
Конфигурирование приложения▪ Configuration Builder
▪ Файлов преобразований (web.Release.config) больше нет
▪ Вместо этого предлагается читать из переменных окружения
▪ Либо подключать любые хранилища, которые вам нравятся, как источники конфигурации.
Dependency Injection▪ Раньше использование DI было допустимо и поощрялось
▪ Сейчас движок DI – это неотъемлимая часть фреймворка(при желании – заменяемая часть)
wwwroot▪ Корневой папкой теперь является не корневая папка
▪ А wwwroot
▪ Вопреки непривычности, это очень удобно
bower▪ Система управления клиентскими пакетами зависимостей
▪ Считается очень популярной. Кгргхм.
▪ Довольно, впрочем, удобная
▪ bower install jquery
▪ Поддержка Visual Studio:bower.json с автодополнением
jQuery Bootstrap
FontAwesome
NuGet# всего
13,749,886
2,401,216 366,148
Bower# всего
35,100 83,300 34,400
Bower.# за неделю
373 232 84
gulp▪ Система сборки, основанная на языке JS,
исполняемая в среде Node.js
▪ Сама по себе не умеет делать вообще ничего. Но имеет огромное количество плагинов для решения самых разнообразных задач
▪ Структурная единица – task
▪ Типичные задачи клиентской разработки, решаемые с помощью gulp:- объединение и минификация JS-кода- запуск LESS/SASS преобразовний в CSS-правила- JSHint- разное
▪ Интеграция со студией: - запуск задач gulp из Task Explorer- запуск задач по билдёжным событиям
gulp.task("min:js", function () { gulp.src( [paths.js, "!" + paths.minJs], { base: "." }) .pipe(concat(paths.concatJsDest)) .pipe(uglify()) .pipe(gulp.dest("."));});
Упаковка проекта
▪ Publish Web
Либо новый путь:
▪ dnx . web
▪ Совсем простое клиентское приложение
Разворачиваем запакованное
▪ dnx . web
▪ dnx . kestrel
▪ dnx . nginx ?????????Не сейчас.
Работа на боевых серверах▪ Работает на IIS в x86-режиме
▪ Работает на веб-сервере Kestrel под Linux
▪ Работае в Azure-облаке
Общие библиотеки и командная строка▪ Чтобы создать новый проект командной строки в VS:
File New Project… Templates Visual C# Web Console Application
▪ Там же – и шаблон библиотек, предназначенных для работы под .NET Core/.NET Framework по новой модели
▪ Запускаются консольный программы не напрямую, а через утилиту dnx
Какова степень готовности?▪ Сейчас – в бэте
▪ Почти всё уже работает и компилируется, но ещё можно встретиться с недопереведёнными нужными библиотекам и т.д.
▪ Случаются неожиданные переименования/изменения подхода от одной версии к другой
▪ Периодически всплывают проблемы с диагностикой
▪ Официальный релиз – в районе сентября 2015
Баги естьНаиболее неприятные – падения с отсутвтием диагностики
Например, сейчас неправильный файл package.json вызывает крайнее недовольство студии
Она мигает разными иконками, но о причинах своего недовольства явно не пишет...
Интересное чтение
▪ Исходный код. Читайте!
▪ Официальный сайт. Документация, примеры и статьиhttp://asp.net/vnext(в урле – старое название технологии )
▪ Вики проектов на гитхабе
▪ Основная документация
▪ Блог Дэвида Фаулера
▪ Running ASP.NET 5 applications in Linux Containers with Docker
Интересное видео▪ Introducing ASP.NET 5
▪ Deep Dive into ASP.NET 5
▪ Другой ASP.NET 5: Deep Dive
Вопросы?Внимательно слушаю!
Андрей Кулешов
akuleshov.tula
Специально для http://GetDev.NET