Visual Studio 2015 開發 ASP.NET 5

在以往微軟發佈或更新 Visual Studio 版本時,咱們開發 ASP.NET 應用程序,帶給咱們的變化其實並非很大,或者說你根本就感覺不到變化,你感覺到的只是下載安裝了幾個 G 的 Update 更新包,但此次微軟發佈更新的 ASP.NET,無疑是巨大的,首先咱們來看下 ASP.NET 5 的新功能介紹:css

  • Web Forms、MVC 和 Web API 統一編程模型。html

  • 無編譯開發體驗(no-compile),修改代碼文件,無需編譯,只須要瀏覽器刷新便可。前端

  • 無縫雲開發支持(Cloud-ready environment configuration)。html5

  • 新的 HTTP 請求管道(更快)。node

  • 內置依賴注入。ios

  • NuGet 管理一切,甚至是運行時自己。git

  • 在 IIS 中運行,或自託管(self-hosted)在進程中。github

  • GitHub 開源,意味着你能夠查看源代碼,或貢獻本身的代碼。web

  • ASP.NET 5 運行在 .NET Framework 或 .NET Core 的 Windows 上(關鍵詞:.NET Core)。npm

  • .NET Core 支持並行版本(side-by-side versioning)。

  • ASP.NET 5 能夠運行在 OS X 和 Linux(Mono 運行時)。

下面咱們看下使用 VS2015 開發 ASP.NET 5 過程當中,有哪些「新鮮」的東西。

ASP.NET 5 模版

VS2013 新建 ASP.NET 項目:

VS2015 新建 ASP.NET 5 項目:

從圖中就能夠看到,使用 VS 2015 新建 ASP.NET 5 項目,咱們並不能像 VS 2013 那樣能夠選擇 Web Forms、Web Api,也就是說 ASP.NET 5 是把 Web Forms、MVC 和 Web Api 強制集成到一塊的,並無分開建立各自項目的選擇,咱們也能夠從命名空間上能夠看出,好比 VS 2013 新建的 ASP.NET 項目。

  • MVC 路由配置命名空間爲:System.Web.Mvc;

  • Web Api 路由配置命名空間爲: System.Web.Http;

而在 ASP.NET 5 中,全部的路由配置命名空間統一爲:Microsoft.AspNet.Routing; 路由配置示例代碼:

01. app.UseMvc(routes =>
02. {
03. //MVC Route
04. routes.MapRoute(
05. name: "default",        template: "{controller}/{action}/{id?}",
06. defaults: new { controller = "Home", action = "Index" });
07.  
08. //Web Api Route
09. routes.MapWebApiRoute("DefaultApi""api/{controller}/{id?}");
10. });

ASP.NET 5 目錄結構

新建 ASP.NET 5 項目,解決方案目錄結構:

這邊簡單說一下我所瞭解到的,不必定準確,僅做參考:

global.json

global.json 文件存放在「Solution Items」解決方案目錄下,「to make better support for project-to-project references. It contains 「sources」: [「src」] element, indicating the 「src」 folder as the parent folder for looking for project references.」,這段是我在 MSDN 一篇博文中摘錄的,新建項目的時候,你會發如今 global.json 中,默認有這樣的配置:

1. {
2. "sources": [ "src""test" ]}

僅有的一段配置,我所理解的是 sources 表示此解決方案下的目錄結構,src 爲解決方案目錄(從上面的示意圖就能夠看出),test 爲此 sources 的別名,若是有多個解決方案目錄,直接在 global.json 文件中添加 sources 配置便可,有人可能會問?爲何要這樣進行配置?全部的的項目管理不都是在 *.sln 中進行配置的嗎?用記事本打開 ASP.NET5.sln 文件,摘取一段配置:

1. Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items""Solution Items""{F96F5906-2577-49AD-9693-1809EF74348E}" ProjectSection(SolutionItems) = preProject
2. global.json = global.json EndProjectSection
3. ProjectSection(FolderGlobals) = preProject        __JSONSchema = http://json.schemastore.org/global EndProjectSection
4. EndProject

這段配置其實我不是很懂,但看起來和在 MAC OS 中 Sublime Text 中開發 ASP.NET vNext 項目所保存的 *.sln 很是類似,這意味着什麼呢?是否是說明跨平臺開發的 ASP.NET vNext 項目,可使用不一樣的開發工具打開?這個我沒有試過,不過從 json 格式的 global.json 項目配置文件就能夠看出一點,我以爲這個若是能夠的話(能夠意味着可能),將是很是棒的!

wwwroot

wwwroot 能夠看做是 ASP.NET 5 變化點中提到的自託管(self-hosted),我本身暫時沒有對這個進行研究,你能夠看一下 wwwroot 中具體的文件目錄,其實除了靜態文件(CSS、JS等),其餘並無什麼了,也沒有咱們常見的 bin 文件夾下的一大堆程序集文件,使用 VS2015 發佈應用程序,也會生成一個 wwwroot 文件夾,不過與解決方案中 wwwroot 不一樣的是,發佈後的文件夾多了一個 bin 文件,其中只有一個 AspNet.Loader.dll 程序集,AspNet.Loader.dll 是什麼東西?我也不是很清楚,Google 搜索了下,又發現幾個關鍵詞:OWIN、Helios,而後又發現了一篇很是棒的文章,摘錄一段:

Helios runtime without OWIN.
In this section we use the Helios runtime assembly named Microsoft.AspNet.Loader.IIS.dll that is a standalone assembly and it does not have the direct integration with the OWIN pipeline. The application uses the APIs exposed by the Helios rather then using the OWIN extensibility points by the Microsoft.Owin.Host.IIS.

另外,在新建 ASP.NET5 項目的屬性頁,有一個這樣的配置:

摘錄自張善友一篇博文的部分文字:

K Runtime Environment(KRE)這是一個命令行環境,將構建並運行(再也不有真正的區別)從他們的新 project.json 。ASP.NET vNext 將 packages.config、NuGet 配置(nuspec)以及項目文件(csprojs)合併到統一的項目依賴配置文件 project.json 中。有個簡單的應用程序 K Version Manager (KVM) 負責安裝 KRE,能夠安裝多個版本的 KRE,並能夠在他們之間自由切換。

 

在 KRE target version 中有四個配置選項,默認選項配置爲:KRE-CLR-x86.1.0.0-beta1,這部份內容我沒有找到相關資料說明,我只在 MSDN 中找到一篇不相關博文的部分說明(並無具體說明不一樣選項的不一樣之處):The ASP.NET 5 Application's Property Page is a tool window and can be used to specify the KRE target version, the debug target, and whether binaries and NuGet packages should be created during a Visual Studio build.

Dependencies、References

Dependencies 翻譯爲」依賴「,References 翻譯爲「引用」,Dependencies 下有兩個「目錄」:Bower 和 NPM,簡單說就是 Bower 下爲前端文件(CSS、JS),也能夠爲前端框架,如 bootstrap,經過 bower.json 進行配置加載,NPM(Node Package Manage)Node.js 的包管理器,能夠理解爲前端包管理器,經過 package.json 進行配置,以上都是 VS2015 對前端管理增長的新的東西,有些還不是微軟本身的東西,我也是剛開始學習,具體怎麼配置管理,後面有說明。

References 就是咱們通常見到的「Bin」或「引用」,和以前不一樣的是,目錄中只有 ASP.NET 5.0 和 ASP.NET Core 5.0,其中全部的程序集都是經過 project.json 文件中的 dependencies 進行配置管理,爲何目錄結構變了?而不是咱們常見的「引用」下面加載全部的程序集,這樣有什麼好處?其實我本身以爲一點就是引用更加規範了,我新建的是 ASP.NET 5 類型的項目,那全部的程序集應該都必須適用於此框架下,好比 EntityFramework 7.0 就暫時只適用 ASP.NET 5,新建 AS.NET 5 Class Library 也是如此:

project.json

project.json 是 ASP.NET 5 項目中最最主要的文件,裏面包含了此項目的不少配置,有點像咱們常使用的 Web.config,project.json 文件是 json 格式,對應架構爲:http://json.schemastore.org/project,貼一下示例代碼:

01. {
02. /* Click to learn more about project.json  http://go.microsoft.com/fwlink/?LinkID=517074 ;*/
03. "webroot""wwwroot",
04. "version""1.0.0-*",
05. "dependencies": {
06. "ClassLibrary1""",
07. "EntityFramework.SqlServer""7.0.0-beta1",
08. "EntityFramework.Commands""7.0.0-beta1",
09. "Microsoft.AspNet.Mvc""6.0.0-beta1",
10. //"Microsoft.AspNet.Mvc.WebApiCompatShim": "6.0.0-beta1",
11. "Microsoft.AspNet.Diagnostics""1.0.0-beta1",
12. "Microsoft.AspNet.Diagnostics.Entity""7.0.0-beta1",
13. "Microsoft.AspNet.Identity.EntityFramework""3.0.0-beta1",
14. "Microsoft.AspNet.Security.Cookies""1.0.0-beta1",
15. "Microsoft.AspNet.Server.IIS""1.0.0-beta1",
16. "Microsoft.AspNet.Server.WebListener""1.0.0-beta1",
17. "Microsoft.AspNet.StaticFiles""1.0.0-beta1",
18. "Microsoft.Framework.ConfigurationModel.Json""1.0.0-beta1",
19. "Microsoft.Framework.CodeGenerators.Mvc""1.0.0-beta1",
20. "Microsoft.Framework.Logging""1.0.0-beta1",
21. "Microsoft.Framework.Logging.Console""1.0.0-beta1",
22. "Microsoft.VisualStudio.Web.BrowserLink.Loader""14.0.0-beta1"
23. },
24. "commands": {
25. /* Change the port number when you are self hosting this application */
26. "web""Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000",
27. "gen""Microsoft.Framework.CodeGeneration",
28. "ef":  "EntityFramework.Commands"
29. },
30. "frameworks": {
31. "aspnet50": { },
32. "aspnetcore50": { }    },
33. "exclude": [        "wwwroot",        "node_modules",        "bower_components"
34. ],
35. "packExclude": [        "node_modules",        "bower_components",        "**.kproj",        "**.user",        "**.vspscc"
36. ],
37. "scripts": {
38. "postrestore": [ "npm install" ],
39. "prepare": [ "grunt bower:install" ]    }}

 

project.json 文件中,咱們最常配置的應該是 dependencies 和 commands,commands 配置和我以前在 MAC OS 中使用 Sublime Text 開發 ASP.NET vNext 差很少,能夠經過 server.urls 自定義 URL,就像咱們使用 IIS 進行站點域名綁定同樣,dependencies 下是全部程序集的引用管理,並且都是經過 Nuget 進行加載的,這部分就沒什麼說的了,不少資料都提到過,另外,在 dependencies 配置中添加程序集,VS2015 提供了很是強大的智能感知功能,還能夠提示此程序集的版本號,很是酷!

須要注意的是,你會發現,如今 ASP.NET 5 項目所涉及到的程序集都是以「Microsoft」開頭,而不是以前最多見的「System」,並且版本號大部分爲「1.0.0-beta1」,雖然如今 VS2015 是預覽版本,所涉及到的程序集爲「Beta」也沒什麼問題,但「1.0.0」的版本命名確實有些味道在裏面,我記得在以前無心間看到一篇博文,講到如今 ASP.NET 5 所設計到的 Framework 更新問題,大體意思是如今的版本都是「全新的」,並無在以前的版本中進行「擴充」,而後其中說明了以前 Framework 版本的一大堆問題,很遺憾,我只是大體記得,具體是哪篇博文記不得了。

其餘文件

Controllers、Models 和 Views 和咱們以前開發的 ASP.NET MVC 項目沒什麼區別,Migrations 是示例項目中使用 EntityFramework 代碼遷移文件,Startup.cs 和 OWIN 項目同樣爲項目啓動配置,和之前的 global.cs 相似。

前端管理工具

在 VS2015 中,微軟添加了外部前端管理工具,這在之前的 VS 版本中歷來沒有,並且這些對我來講都是新東西,首先須要瞭解幾個關鍵詞:

  • NPM

  • Bower

  • Grunt

若是你也不瞭解他們,能夠從下面幾篇博文進行學習:

說一下我本身對這些的理解,Bower 能夠看做是「原材料提供商」,NPM 能夠看做是「工具的提供商」,Grunt 能夠看做是「具體的工具」,什麼意思呢?一個「產品」的產生須要工具對原材料的加工處理,選用什麼原材料,Bower 說了算(經過 bower.json 進行配置管理),而後 NPM 提供對這些原材料加工的工具(經過 package.json 進行配置管理),好比 Grunt,最後加工出成型的產品(經過 gruntfile.js 進行配置管理),這裏面說的「加工」,其實就是發佈管理。

另外,在 VS2015 中,提供了一個 Task Runner Explorer 管理窗口,它主要的做用爲 NPM 提供的工具,進行「可視化」的管理(好比 Grunt):

無編譯開發

無編譯開發指的是,使用 VS2015 開發 ASP.NET 5 項目,修改代碼文件,無需從新編譯生成,只須要保存並刷新瀏覽器便可,一張圖說明:

Microsoft Git Provider

Microsoft Git Provider 是 VS2015 提供的默認代碼管理工具,咱們以前在其餘的 VS 版本中,若是代碼託管使用的是 Git,咱們通常會在 VS 中安裝一個叫「Git Source Control Provider」的擴展插件,但在 VS2015 中內置了一個 Git 插件,並且很是強大,真是不用不知道,一用嚇一跳。

是否是很是酷呢?我以爲酷炫極了,你能夠從這張示意圖中獲得不少的 Git 信息,每一個方法名上面都有一個最後提交的做者信息,還有更新時間顯示,點擊這個提示以後,會有一個圖表顯示更新者的更新點,再點擊會有此次更新點的具體信息。。。

VS2015 中的這個功能,總之一句話「碉堡了」。

智能感知和錯誤信息

VS2015 中的智能感知功能,主要表如今其代碼實現是否包含在某一框架中,以下圖:

關於錯誤信息的描述,看了 MSDN 中的一篇博文,感受不是很明白,大體意思是錯誤信息能夠顯示不一樣框架的實現,這個不一樣框架指的是 References 中的 ASP.NET 5.0 和 ASP.NET Core 5.0,其實我也並非很明白這兩個框架的具體做用,之後在使用的時候再進行探究吧。

另外,還有一個功能是若是出現錯誤,VS2015 會「告知」你:代碼應該怎麼寫?

Smart Unit Testing

Smart Unit Testing 原名爲 PEX,聽說來自微軟研究院的技術,有關介紹:Generate smart unit tests for your code

在 VS2015 中,整合了 Smart Unit Testing,使得咱們進行單元測試變得異常簡單,你只須要在你須要測試的方法中「右擊」,而後點擊「Smart Unit Testing」:

Smart Unit Testing 窗口:

在咱們進行這項操做的時候,須要注意的是,並無新建 Unit Test 的單元測試項目,而只是單純的使用 VS2015 進行單元測試,也就是說單元測試代碼咱們並無進行編寫,直接使用測試工具對源代碼進行測試,這種方式和咱們使用傳統的 XUnit 測試有所區別,固然有好處也有壞處,取捨問題,適合就好。

Visual Studio 2015 開發 ASP.NET 5 有何變化?如今來講只是皮毛,也就是說是一些表面的東西,真正去理解並使用它,只有經過實際項目的應用,目前來講,Visual Studio 2015 開發 ASP.NET 5 並非那麼簡單,須要學習的東西還有不少,這篇博文但願能夠給你帶來一些幫助。

相關文章
相關標籤/搜索