在Visual Studio 2015 RTM和Windows 10正式發布之前,微軟把開源.NET升級到了beta5,帶來了一些增強和改變。和Visual Studio 2015 RC一起安裝的ASP.NET 5運行時是beta4,前幾天微軟發布了這個運行時的beta5版本。整個升級包括如下幾個方面:
-
.NET執行環境(DNX)
- 支持Nuget v3,恢復包的速度更快
- 支持全新的.NET目標框架監測器(TFM)
- 在project.json中可以設置語言和發布說明的鏈接
- 消除了JSON.NET的固定版本要求:即不再要求你的應用程序使用和DNX一致的JSON.NET版本
- 新的IRuntimeEnvironment服務
-
ASP.NET 5函數庫
- HttpContext.Connection,通過HttpContext可以獲得連接的信息
- 提供了本地化的抽象和中間件,且提供了示例幫助大家了解用法
- 統一終止ASP.NET宿主環境的快捷鍵為Ctrl+C
-
MVC 6
- 在Razor支持C# 6的新特性
- 簡化了MVC的選項設置,添加了頂級配置
- 在視圖中可以使用JSON Helper來序列化數據模型
- 在Route標記中能夠使用通配替換
- 新的ImageTagHelper
- Tag Helper支持綁定字典屬性
- Tag Helper支持條件綁定
ASP.NET 5 Beta5 Now Available中不僅詳細介紹了上述增強,也給出了一個大致的升級步驟, 同時也給出了一個破壞變更的列表,主要的變化是Configuration部分的命名空間改變和程序集的整理,以及Entity Framework 7數據遷移的變化。具體參見:https://github.com/aspnet/announcements/issues?q=milestone%3A1.0.0-beta5
把ASP.NET 5的項目代碼從beta 4升級到beta5遵從了文章ASP.NET 5 Beta5 Now Available文章中提到的基本步驟。
1,安裝或升級DNVM。
如果沒有.NET Version Manager (DNVM),需要通過如下代碼來安裝(如果已經有了執行如下代碼也會升級到最新版本):
1: @powershell -NoProfile -ExecutionPolicy unrestricted -Command "&{$Branch='dev';iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.ps1'))}"
理論上,執行以上代碼就可以把dnvm安裝(或升級)到"beta6-10395",明顯的不同是多了一個"update-self"的命令。
如果在已經有beta4的dnvm,那么執行上述命令后,需要重啟命令行窗口才能看到最新的dnvm版本;當然我也遇到一個奇怪的問題,就是執行上述代碼后死活不能升級,最后無奈,只好先執行第二步(見:升級DNX運行時)的特殊步驟,然后就會看到dnvm也自動升級為最新版本了。
2,升級DNX運行時。
如果正常升級了DNVM,那么無需去設置"DNX_FEED"環境變量,因為最新版的DNVM的默認地址已經是"https://www.nuget.org/api/v2"。現在只需要執行"dnvm upgrade"就可以下載并安裝ASP.NET 5的Beta5運行時了(默認是clr x86),也會自動把這個運行時設置激活狀態和default別名。
當然如果沒有升級DNVM,那么可以設置"DNX_FEED",然后再升級DNX運行時。
也可以不設置"DNX_FEED",直接執行"dnvm upgrade",來先升級到beta5的預發布版本(beta5-12103)。升級到beta5的預發布版本會同時升級dnvm,然后再次執行"dnvm upgrade",升級到beta5正式發布版本。(這里說的就是上面提到的特殊步驟)。
3,修改project.json中的包引用。
打開解決方案中所有項目的project.json文件的,把其中所有后綴"beta4"的包修改為"beta5",保存project.json文件后,VS會自動更新到最新的beta5的包。
需要注意的是,xunit的相關包要改為引用beta5的編譯版本,即"xunit": "2.1.0-beta3-build3029","xunit.runner.dnx": "2.1.0-beta3-build99"。
和Configuration相關的包,從"Microsoft.Framework.ConfigurationModel"修改為"Microsoft.Framework.Configuration"。
把"Interfaces"后綴的包修改為"Abstractions"。
4,解決代碼變更。根據更新尤其破壞變更列表(https://github.com/aspnet/announcements/issues?q=milestone%3A1.0.0-beta5),來修改編譯有問題的代碼。主要的修改有:
-
EF7的遷移修改了代碼接口(從屬性改為方法),為了避免大量修改代碼我是自己重建Migration。如果需要修改,見:https://github.com/aspnet/Announcements/issues/35
-
把命名空間"Microsoft.Framework.ConfigurationModel"修改為"Microsoft.Framework.Configuration"。
-
IConfiguration.GetSubKey修改為IConfiguration.GetConfigurationSection
-
_GlobalImport.cshtml重命名為_ViewImports.cshtml,修改后VS2015可能會報類型沒有引用,不必理會(等著VSWebTools更新)
-
我之前講解EF數據遷移的文章提到的代碼"db.Database as SqlServerDatabase"要改為"db.Database as RelationalDatabase"
-
單元測試中,必須顯式執行services.AddLogging()
文章列表