O nowościach w MVC 6.0 pisałem już np. tutaj http://www.pzielinski.com/index.php?s=MVC+6
Moim zdaniem, największe zmiany jednak mają miejsce w infrastrukturze i architekturze wewnętrznej ASP.NET. Jedną z tych zmian jest plik project.json, który definiuje wszelkie referencje w projekcie. Tworząc nowy projekt, project.json będzie wyglądać następująco:
{ "webroot": "wwwroot", "userSecretsId": "aspnet5-WebApplication3-157b1a61-1b29-4343-8796-15c96e7e7daa", "version": "1.0.0-*", "dependencies": { "EntityFramework.SqlServer": "7.0.0-beta4", "EntityFramework.Commands": "7.0.0-beta4", "Microsoft.AspNet.Mvc": "6.0.0-beta4", "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta4", "Microsoft.AspNet.Authentication.Cookies": "1.0.0-beta4", "Microsoft.AspNet.Authentication.Facebook": "1.0.0-beta4", "Microsoft.AspNet.Authentication.Google": "1.0.0-beta4", "Microsoft.AspNet.Authentication.MicrosoftAccount": "1.0.0-beta4", "Microsoft.AspNet.Authentication.Twitter": "1.0.0-beta4", "Microsoft.AspNet.Diagnostics": "1.0.0-beta4", "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta4", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta4", "Microsoft.AspNet.Server.IIS": "1.0.0-beta4", "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4", "Microsoft.AspNet.StaticFiles": "1.0.0-beta4", "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta4", "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta4", "Microsoft.Framework.ConfigurationModel.UserSecrets": "1.0.0-beta4", "Microsoft.Framework.CodeGenerators.Mvc": "1.0.0-beta4", "Microsoft.Framework.Logging": "1.0.0-beta4", "Microsoft.Framework.Logging.Console": "1.0.0-beta4", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta4" }, "commands": { "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000", "gen": "Microsoft.Framework.CodeGeneration", "ef": "EntityFramework.Commands" }, "frameworks": { "dnx451": { }, "dnxcore50": { } }, "exclude": [ "wwwroot", "node_modules", "bower_components" ], "publishExclude": [ "node_modules", "bower_components", "**.xproj", "**.user", "**.vspscc" ], "scripts": { "postrestore": [ "npm install", "bower install" ], "prepare": [ "gulp copy" ] } }
Widzimy, że największą sekcją są zależności. Nie ma pliku package.config, który wcześniej zawierał referencje do pakietów NuGet. Jeśli chcemy dodać referencje wystarczy, że dodamy ją bezpośrednio do project.json:
"dependencies": { "NUnit": "3.0.0-alpha", ... }
Po edycji pliku, pakiet zostanie zainstalowany i nie musimy nic więcej robić:
Visual Studio zawsze synchronizuje stan projektu z project.json. Wystarczy więc dodać, zmodyfikować lub usunąć referencję w project.json, a reszta zostanie wykonana przez VS. Oczywiście możemy skorzystać ze standardowych komend instalacji NuGet(install-package), ale bardzo często edycja project.json jest szybsza, zwłaszcza ze wsparciem Visual Studio. Wpisując pierwsze znaki, VisualStudio podpowie nam listą dopasowanych bibliotek:
Analogicznie sprawa wygląda z wersją:
Project.json zastępuje tak naprawdę web.config. Na przykład wersję frameworku określa się za pomocą:
"frameworks": { "dnx451": { }, "dnxcore50": { } },
Zaglądając do folderu, w którym znajduje się aplikacja, przekonamy się o kilku innych drobiazgach:
- Brak global.asax.
- Brak pliku projektu. Co prawda istnieje xproj, ale to zupełnie co innego. Otwierając xproj w notatniku zobaczymy, że nie ma tam referencji czy struktury projektu. Wszelkie referencje znajdują się w opisanym wyżej project.json.
- Brak assembly.cs
- Brak package.config
- Brak web.config
Wszystko po to, aby ułatwić hostowanie aplikacji w innych środowiskach niż IIS. O szczegółach napiszę w osobnym wpisie, ale możliwy jest m.in. self-hosting. Project.json (wraz z Startup.cs) zastąpił wszystkie powyższe pliki. Startup.cs jest implementacją specyfikacji OWIN i nowej architektury, ale o tym również innym razem.
Na zakończenie, screenshot z nowej solucji w ASP.NET 5.0:
Dzięki za zwięzłe podsumowanie. Szkoda, że tak długo trzeba czekać na finalną wersję i co ważne dokumentację. Z tego też powodu następny projekt zrobiłem w Nancy. MVC6 musi jeszcze chwilę poczekać.
Killer ficzer jak dla mnie. Wreszcie bedzie mozna bez problemowo edytowac pliki w vimie. Oparcie struktury folder i plikow o file system to najwieksza zmiana na ktora czekalem 😉 Koniec recznego edytowania csproj.
W vim’ie ;)?