打開VS2015,創建Web項目,選擇ASP.NET Web application,在彈出的窗口里選擇ASP.NET 5 Website模板創建項目,圖示如下:
我們可以看到,此時Web Forms/MVC/Web API復選框都選擇不了,原有是因為在ASP.NET 5中做了大量更改,移除了Web Forms功能,將MVC、Web API、Web Pages這些功能合在了一起,所以自然就不需要這些復選框了。另外由于是CTP版,所以目前還沒有提供單元測試項目的創建。
新創建的項目在VS的解決方案目錄結構和實際文件夾的目錄結構分別如下:
注意:上圖是在VS 預覽版中的截圖,在新版的RC版本中,默認的客戶端構建工具變成了gulp(即配置文件是gulpfile.js),而非原來的grunt了。
兩個圖的差異非常大,我們來一一分析一下這些差異。
通過圖示,我們可以看到,在根目錄中,不僅項目文件從從csPRoj變成了xproj,還少了很多之前的文件(如web.config),但也多了很多不同的文件以及文件夾,我們先列出這些不同的文件盒文件夾,再來一一講解這些內容。
文件/文件夾 | 功能描述 |
---|---|
config.json | 程序的配置文件,類似于web.config。 |
project.json | 該項目的主要配置,主要是負責程序集、項目部署等方面。部分功能類似于之前的package.config。 |
package.json | npm的配置文件,npm是基于Nodejs的包管理器。 |
bower.json | Bower管理器的配置文件,Bower是專門用于管理前端項目的包管理器。 |
gulpfile.js | 是gulp的配置文件,gulp是基于Nodejs的javascript任務管理器,在ASP.NET5中主要是用于管理NPM和Bower中的內容。 |
Stratup.cs | 程序啟動入口,類似于Global.asax。 |
Project_Readme.html | 項目說明文件,沒啥用。 |
wwwroot | 靜態資源文件(如CSS、圖片、js)的存放目錄。 |
Dependencies | Bower和NPM的依賴管理包。 |
References | 程序集引用,和以前的類似,但現在有了版本之分(如ASP.NET 5.0和ASP.NET Core 5.0)。 |
project.json是項目的核心配置文件,示例如下:
{ "webroot": "wwwroot", "version": "1.0.0-*", "dependencies": { "Microsoft.AspNet.Diagnostics": "1.0.0-beta4", "Microsoft.AspNet.Mvc": "6.0.0-beta4", "Microsoft.AspNet.Mvc.TagHelpers": "6.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.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", "Microsoft.Framework.ConfigurationModel.UserSecrets": "1.0.0-beta4" }, "commands": { "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000", "gen": "Microsoft.Framework.CodeGeneration" }, "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" ] }}
由于該文件的詳細參數非常多,具體詳細內容請參考http://go.microsoft.com/fwlink/?LinkID=517074 ,在這里我們主要講解如下3個類型的內容。
webroot是指定該web項目的靜態文件存放地址,目前是用于在發布的時候講該目錄中的內部發布的正確的位置(詳細內容可以在部署發布章節中找到)。注意BookStore解決方案中帶有地球圖標的wwwroot
目錄是真實的文件夾路徑,我們可以對其進行修改,比如將其修改為wwwroot1
,那么相應的webroot的值也應該修改為wwwroot1
,因為gulpfile.js里代碼要通過project.webroot
來使用該目錄,以便能夠將bower管理的前端庫都復制到正確的目錄。
在解決方案的References節點點,我們看到有兩個分類,分別是:DNX 4.5.1和DNX Core 5.0,其中DNX Core 5.0就是我們所說的云優化版(即可以在其它操作系統下部署的跨平臺版),而DNX 4.5.1則是和之前版本一樣的全功能版,這兩個版本的程序集是通過dependencies
節點進行管理的。
在一級dependencies
節點,主要是定義該項目的通用程序集引用以及版本,而不同的版本的程序集則在framworks
下的各版本下的dependencies
節點進行維護,比如:
"frameworks": { "dnx451": { "dependencies": {"log4net": "2.0.3"} /* 只在全功能版中引入log4net程序集*/ }, "dnxcore50": { }}
上述兩種類型的程序集在維護的時候,都有智能提示(包括程序集名稱以及版本號),在當定義完自己要用的程序集并保持之后,系統會自動從Nuget上下載所需要的程序集,你也可以通過右鍵References選擇Restore Packages來更新所有的程序集引用。同時你依然可以通過右鍵References的形式通過Nuget來管理這些程序集。
新版的VS2015允許我們在build解決方案之前、之后、過程;下載程序集之前、之后;更新程序集之前、之后自定義一些基于Nodejs的自定義事件來執行。該事件在project.json中的定義節點是scripts,示例如下:
"scripts": { "postrestore": [ "npm install" ], // 在更新所有的程序集之前執行npm install事件 "prepare": [ "gulp copy" ] // 在打開解決方案之前,執行gulp任務,調用bower的install方法。}
具體的事件名稱如下:
時機 | 描述 |
---|---|
prebuild | 構建之前執行 |
postbuild | 構建之后執行 |
prepack | packing之前執行 |
postpack | packing之后執行 |
prerestore | restoring packages之前執行 |
postrestore | restoring packages之后執行 |
package.json
是NPM
管理器的配置文件,由于在VS2015默認就深度集成了Nodejs
,而NPM
又是Nodejs
的默認包管理器,所以所有基于Nodejs
的包都要在這里進行配置。該配置文件的默認配置如下:
{ "name": "ASP.NET", "version": "0.0.0", "devDependencies": { "gulp": "3.8.11",//gulp任務管理器 "rimraf": "2.2.8" // 遞歸刪除文件的nodejs包 }}
上述代碼中的rimraf
是一個遞歸刪除文件的nodejs包,我們也可以引用其他插件,像project.json
文件中管理程序集一樣,在package.json
文件中來管理前端程序的各種包,例如jquery,bootstrap等等,比如我們要安裝一個express包,只需要在json文件中添加一個express字符串鍵,并選擇器版本就可以了,系統會自動下載該NPM包并顯示在解決方案的Dependencies->NPM
節點下。
注意:已經安裝的包不能自動移除(即不能通過在JSON中移除配置),需要右鍵執行該包,并手工卸載。
所有的前端包都配置子bower.json文件中,比如你需要的jquery、bootstrap、angular等等,其管理方式與project.json里的程序集和package.json里的npm包一樣,都是通過在dependencies節點下聲明包的名稱和版本來實現的。
我們可以在此聲明一個angular包,保存以后就可以看到在解決方案Dependencie->Bower節點下該angular已經自動下載好了,編譯項目,就可以看到在wwroot/lib也可以看到angular文件夾以及相應的文件了。
在bower.json還有一個exportsOverride節點非常重要,他擴展了原來bower的前端文件copy機制,默認情況下bower只會復制main節點定義的文件。但有時候我們要復制的文件可能不止這些,所以grunt-bower-task插件就擴展了該功能,定義了這個exportsOverride節點,其使用規則如下:
注意,exportsOverride節點中定義的key/value,其中key表示要文件復制目標(即wwwroot/lib下)對應包名下的子目錄,value表示源文件目錄或文件。例如:
"bootstrap": { "js": "dist/js/*.*", //將dist/js/下的所有文件,復制到wwwroot/lib/b
新聞熱點
疑難解答