Post on 13-Jan-2017
ASP.NET vNext – MVC6Mailson de Queiroz Proença
Agenda
Breve história do Asp.NET;
Dependência do System.Web;
Algumas soluções implementadas;
Motivição para o desenvolvimento do vNext;
O novo ASP.NET (vNext):
Vantagens;
Componentes e Comandos;
Exemplos;
Conclusão.
ASP.NET – Um pouco de sua história
Primeira versão em 2002 junto do .NET Framework 1.0;
Utiliza-se C# ou VB.NET;
Desenvolvido para rodar no IIS;
Vários conceitos em um único pacote (System.WEB):
Session;
Cache;
WebForms;
Controls.
System.Web
Um projeto MVC vazio já vem com vários
arquivos;
Você tem que “pagar” por algo que não
quer ou não precisa;
ASP.NET – Um pouco de sua história
O ASP.NET(System.Web) é entregue como parte do .NET
Framework;
Ciclo de atualizações lentas;
Os recursos do ASP.NET cresceram, aumentando o
tamanho e complexidade do System.Web;
Isso ocasiona aumento no consumo de recursos para o
ASP.NET rodar;
Uma única opção de host – O IIS.
Soluções
2007 – 2008: foi introduzido o framework MVC ao
ASP.NET:
O MVC é distribuído separadamente, aumentando a entrega
de atualizações;
2012 – 2013: foi lançado o ASP.NET Web API e ASP.NET SignaIR:
Escrito sem nenhuma dependência com o System.Web;
Possui capacidade de Self-Hosting(Independente de IIS).
Motivação para desenvolvimento do vNext
A versão atual do ASP.NET te obriga a passar por um pipeline
gigantesco;
Isso impacta desempenho;
No vNext pode-se escolher o que vai ser utilizado;
O novo ASP.NET (vNext)
Ainda em desenvolvimento;
ASP.NET MVC, ASP.NET Web Forms e Web API agora é um só, chamado
MVC 6;
Acabou a depedência do System.Web;
Ciclo de desenvolvimento rápido;
Escolha seu editores e ferramentas;
Cógido aberto com contribuições externas (disponível no GitHub);
Maior portabilidade:
não existe depedência de assemblies, facilitando o deploy em nuvem e em
ambientes não Windows;
O novo ASP.NET (vNext)
Possibilidade de hospedar sua aplicação no IIS ou em um
processo self hosted;
Voltado para ambiente Cloud Computing;
Suporte ao legado do MVC 5, Web API 2, Web Page 3,
SignaIR 2 e EF 6;
Baixíssimo consumo de memória;
Completamente multiplataforma! Rode ASP.NET onde
quiser!
Compatível com Mac OS e Linux através do projeto Mono.
O novo ASP.NET (vNext)
Oferece suporte a gerenciadores de pacotes:
GruntJS: é uma ferramenta que tem como objetivo automatizar
tarefas, principalmente com Javascript.
Bower: gerenciar componentes de front-end;
NPM(Node Package Manager): gerenciador de Pacotes do Node.JS.
Componentes / Comandos do ASP.NET
(vNext)
Kruntime: é um SDK que contém todos os binários necessários para
compilação e execução da aplicação;
KVM - K Version Manager: Script Powershell responsável por gerenciar
as versões do KRE em seu ambiente;
KRE - K Runtime Environment: Runtime responsável por compilar e
rodar sua aplicação;
KPM - K Package Manager: Gerenciador de pacotes, este comando
instala os pacotes necessários para rodar sua aplicação dentro da
versão do runtime que está sendo utilizado;
K – Command: Utilize o commando K para rodar as aplicações (K run, K
web, etc.
KVM
List: lista os KREs disponíveis;
Upgrade: instala a última versão do KRE
Padrão é não usar o cloud optimized
Já deixa essa versão como sendo a padrão;
Install: instala uma versão específica do KRE;
Use: escolhe uma versão;
KPM
Restore: restaura os pacotes, colocando-os em
$HOME/.kpm/packages;
Pack: prepara a aplicação para deploy (mas não compila);
Build: compila o projeto e gera a dll e o nupkg;
Add: adiciona uma dependência ao projeto;
K
run: executa uma aplicação console;
web: executa aplicação Web e aplicação MVC (Windows);
kestrel: compila e executa a aplicação Web;
Project.json
Dependências
{
"dependencies": {
"Kestrel": "1.0.0-beta4", "Microsoft.AspNet.ConfigurationModel": “1.0.0-beta-*"}
}
Project.json
Commands
{
"commands": {
"kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004",
"web": "Microsoft.AspNet.Hostingserver.name=Microsoft.AspNet.Server.WebListenerserver.urls=http://localhost:5001",
"test": "Xunit.KRunner"
}
}
Project.json
Configurações{
"configurations": {
"Debug": {
"compilationOptions": {
"define": ["DEBUG", "TRACE"],
"debugSymbols": true
}
},
"Release": {
"compilationOptions": {
"define": ["RELEASE", "TRACE"],
"optimize": true,
"debugSymbols": false
}
}
}
}
Project.json
Frameworks
{
"frameworks": {
“dnx451": {},
“dnxcore50": {
"dependencies": {
"System.Collections": "4.0.0.0",
"System.Collections.Concurrent": "4.0.0.0",
"System.ComponentModel": "4.0.0.0",
"System.Linq": "4.0.0.0",
"System.Reflection": "4.0.10.0",
}
}
}
}
Project.json
Sources
{
"code": "*.cs",
"exclude": "buggy/**/*.cs",
"resources": "embed/**/*.*"
}
Project.json
Scripts
{
"scripts": {
"postrestore": [
"npm install",
"bower install"
],
"prepare": [
"gulp copy"
] }
}
Startup.cs
Classe de inicialização do projeto;
Deve conter o método Configure:
onde deve ser feita toda configuração do pipeline HTTP.
public class Startup{
public void Configure(IApplicationBuilder app)
{
app.UseServices(services => services.AddMvc());
app.UseMvc();
}
}
Cadê o Web.Config?
Você pode ter outros tipos de arquivo de config
Web.Config
Config.ini
Config.json;
Tudo depende do Configuration Model escolhido
Por padrão é o
Microsoft.Framework.ConfigurationModel.Json
O que roda sua aplicação não é uma dll
O código que vai rodar é .cs;
Você ainda pode pré-compilar;
Deploy muito facilitado:
kpm pack;
Dependências locais, tudo que vai rodar está no diretório da
aplicação;
As dependências são pacotes (Nuget), não dlls.
Servidor web
IIS funciona;
Self host;
Kestrel (self host feito pela Microsoft baseado em libuv – o mesmo do
Nodejs)
Suporte a outros servidores são esperados:
Apache;
Devices menores agora podem rodar (roteadores wifi, modem,
RaspberryPi, carros, etc).
Exemplo prático
Referências
http://www.asp.net/vnext
http://www.devmedia.com.br/novidades-do-asp-net-vnext-e-do-visual-studio/31166
http://eduardopires.net.br/2014/05/o-futuro-do-asp-net-vnext-mvc-6/
https://blog.lambda3.com.br/2014/05/asp-net-vnext-impresses-iniciais/
http://docs.asp.net/en/latest/conceptual-overview/aspnet.html
http://www.theregister.co.uk/2015/02/24/now_with_grunt_and_gulp_aspnet_goes_crossplatform_in_new_visual_studio_2015_preview/
http://stephenwalther.com/archive/2015/01/12/asp-net-5-and-angularjs-part-1-configuring-grunt-uglify-and-angularjs
http://stephenwalther.com/archive/2015/02/24/top-10-changes-in-asp-net-5-and-mvc-6
https://github.com/aspnet/home
http://xunit.github.io/docs/getting-started-aspnet.html
http://www.hanselman.com/blog/ASPNET5VNextWorkInProgressExploringTagHelpers.aspx