本篇博文目錄:
Visual Studio 2015 Preview 版本部分說明:
在以上版本說明中,注意反復出現的關鍵詞“only”,也就是說,如果你想要體驗這次微軟發布的一系列新的東西,比如:C# 6.0、ASP.NET 5、EntityFramework 7.0 等(Visual Studio 其他版本暫不支持),那么首先你需要下載并安裝 Visual Studio 2015 Preview。
在以往微軟發布或更新 Visual Studio 版本時,我們開發 ASP.NET 應用程序,帶給我們的變化其實并不是很大,或者說你根本就感受不到變化,你感受到的只是下載安裝了幾個 G 的 Update 更新包,但這次微軟發布更新的 ASP.NET,無疑是巨大的,首先我們來看下 ASP.NET 5 的新功能介紹:
下面我們看下使用 VS2015 開發 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 項目。
而在 ASP.NET 5 中,所有的路由配置命名空間統一為:Microsoft.AspNet.Routing; 路由配置示例代碼:
app.UseMvc(routes =>{ //MVC Route routes.MapRoute( name: "default", template: "{controller}/{action}/{id?}", defaults: new { controller = "Home", action = "Index" }); //Web Api Route routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}");});
新建 ASP.NET 5 項目,解決方案目錄結構:
這邊簡單說一下我所了解到的,不一定準確,僅作參考:
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 中,默認有這樣的配置:
{ "sources": [ "src", "test" ]}
僅有的一段配置,我所理解的是 sources 表示此解決方案下的目錄結構,src 為解決方案目錄(從上面的示意圖就可以看出),test 為此 sources 的別名,如果有多個解決方案目錄,直接在 global.json 文件中添加 sources 配置即可,有人可能會問?為什么要這樣進行配置?所有的的項目管理不都是在 *.sln 中進行配置的嗎?用記事本打開 ASP.NET5.sln 文件,摘取一段配置:
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F96F5906-2577-49AD-9693-1809EF74348E}"ProjectSection(SolutionItems) = preProjectglobal.json = global.jsonEndProjectSectionProjectSection(FolderGlobals) = preProject__JSONSchema = http://json.schemastore.org/globalEndProjectSectionEndProject
這段配置其實我不是很懂,但看起來和在 MAC OS 中 Sublime Text 中開發 ASP.NET vNext 項目所保存的 *.sln 非常相似,這意味著什么呢?是不是說明跨平臺開發的 ASP.NET vNext 項目,可以使用不同的開發工具打開?這個我沒有試過,不過從 json 格式的 global.json 項目配置文件就可以看出一點,我覺得這個如果可以的話(可以意味著可能),將是非常棒的!
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 下有兩個“目錄”: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 是 ASP.NET 5 項目中最最主要的文件,里面包含了此項目的很多配置,有點像我們常使用的 Web.config,project.json 文件是 json 格式,對應架構為:http://json.schemastore.org/project,貼一下示例代碼:
{ /* Click to learn more about project.json http://go.microsoft.com/fwlink/?LinkID=517074 */ "webroot": "wwwroot", "version": "1.0.0-*", "dependencies": { "ClassLibrary1": "", "EntityFramework.SqlServer": "7.0.0-beta1", "EntityFramework.Commands": "7.0.0-beta1", "Microsoft.AspNet.Mvc": "6.0.0-beta1", //"Microsoft.AspNet.Mvc.WebApiCompatShim": "6.0.0-beta1", "Microsoft.AspNet.Diagnostics": "1.0.0-beta1", "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta1", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta1", "Microsoft.AspNet.Security.Cookies": "1.0.0-beta1", "Microsoft.AspNet.Server.IIS": "1.0.0-beta1", "Microsoft.AspNet.Server.WebListener": "1.0.0-beta1", "Microsoft.AspNet.StaticFiles": "1.0.0-beta1", "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta1", "Microsoft.Framework.CodeGenerators.Mvc": "1.0.0-beta1", "Microsoft.Framework.Logging": "1.0.0-beta1", "Microsoft.Framework.Logging.Console": "1.0.0-beta1", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta1" }, "commands": { /* Change the port number when you are self hosting this application */ "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls h
新聞熱點
疑難解答