微軟在2014年5月12日的TechEd大會上宣佈將會發佈下一代ASP.NET框架ASP.NET vNext的預覽。此次發佈的ASP.NET框架與以前相比發生了根本性的變化,凸顯了微軟“雲優先”(cloud-first)的新戰略思想。微軟員工Scott Hanselman發佈博客對ASP.NET vNext進行了簡要介紹。以下爲其博客的翻譯。
原文:http://www.hanselman.com/blog/IntroducingASPNETVNext.aspx
譯文發佈地址:http://blog.csdn.net/cheng_tian/article/details/25708445
轉載請註明出處。
近來微軟的ASP.NET以及Web工具團隊正在搞一些很酷的玩意兒。在過去幾年,我們瘋狂“壓榨”了微軟的員工們,而現在,我們的瘋狂蔓延到了.NET核心團隊,以及其他更多領域。
今天我們發佈了運行於服務器上的下一代.NET的預覽(也就是alpha版本)。
你也許曾在早些時候的Build大會上聽到過以下這些產品的發佈:
- .NET Native - 提前編譯.NET代碼。一切都變得更快了。
- .NET編譯器平臺(Roslyn) - 嶄新的C#以及VB編譯器,新的語言特性,編譯即服務(compiler-as-a-service),以及,它是開源的。
- Nextgen JIT - 爲最新處理器優化的嶄新的即時編譯器(Just-in-time-compiler)
而ASP.NET vNext的出現,將會把一切推上更高層次。今天,你用來運行ASP.NET的通用語言運行庫(CLR)與桌面應用所使的是完全相同的。但是我們正在做的事情是:增加針對雲計算環境進行優化的CLR版本。優化時考慮的場景包括“低內存消耗”以及“高吞吐量”等等。
ASP.NET vNext 使得你能夠爲每一個應用部署定製化的.NET框架。一個使用新版本代碼庫(library)的應用不會讓部署在同一服務器上使用該代碼庫的不同版本的應用悲劇。不同的應用甚至可以有不同優化側重點的個性化CLR。CLR以及針對雲環境優化的代碼庫都成爲了可自由選擇和搭配的NuGet包。
從下面這張截圖你可以看到,418號版本與420號版本的新框架(注意它們佔用了很少的空間)都在我的包目錄中。這些NuGet包包括了完整的“核心CLR”以及針對雲環境優化的.NET框架。你可以把你的應用和其依賴的定製化CLR以及.NET框架一同部署成爲一個NuGet包。
我可以在VisualStudio裏運行ASP.NET vNext應用,當然,還有IIS服務器上。另外我還可以非常便捷地把ASP.NET vNext應用託管在命令行裏或者我自己的應用裏(譯者注:原文說法爲“self-host”)。我們發佈的這個alpha版本包括了用來運行和管理ASP.NET vNext應用的命令行工具。
“kvm”命令讓我能夠控制我的運行環境(environment)。我可以執行“kvm list”來查看有哪些版本的ASP.NET vNext可供使用。我可以在不同版本的ASP.NET vNext間自由切換,並且每個運行環境都可以有自己的版本配置。
C:\>kvm list
Active Version Runtime Architecture Location
------ ------- ------- ------------ --------
0.1-alpha-build-0418 svr50 x86 C:\Users\scottha\.kre\packages
* 0.1-alpha-build-0418 svrc50 x86 C:\Users\scottha\.kre\packages
0.1-alpha-build-0420 svr50 x86 C:\Users\scottha\.kre\packages
0.1-alpha-build-0420 svrc50 x86 C:\Users\scottha\.kre\packages
我可以使用“kvm useversion”來設置當前使用版本(active version)。這裏我打開了兩個命令行控制檯進行設置,每個控制檯可以有自己獨立的CLR和.NET版本。
這裏我讓同一應用運行了兩次,每個命令行控制檯各一次。我讓420號版本的應用監聽5420號端口,讓418號版本監聽5418號端口。
下面可以看到,這個小小的應用會顯示當前在運行的ASP.NET vNext的版本號。請注意,我這裏是在同一時間、同一機器運行着使用不同版本ASP.NET框架的同一應用。
項目組織管理(projectsystem)也在起變化——我們將packages.config,NuGet配置(nuspec)以及項目文件(csprojs)合併成爲統一的項目依賴配置,並將這個配置呈現在一個 project.json文件裏。
NuGet包以及類庫被認爲是沒有區別的。你將會在project.json文件裏得到完整的智能提示(見下圖),而NuGet包會被自動地、透明地下載到環境中。另外還有更好的消息:讓我們假設NuGet包Foo.Bar有一個bug,而你在本地項目裏創建一個名爲Foo.Bar的文件夾並在這個文件夾裏使用“git clone”將Foo.Bar的源代碼複製到本地,那麼本地版本的Foo.Bar就會覆蓋(override)NuGet所控制的版本,使得你可以使用自己修復的Foo.Bar,而非默默等待Foo.Bar的開發者發佈新版本。當一個修復了bug的新版本Foo.Bar出現在NuGet服務器上時,你可以簡單地更新版本號並刪除本地版本以使用新版本。
另一個亮點是類似node.js或者ruby on rails的“無編譯”(no compile)。你只需要修改代碼然後刷新去查看修改後效果。通過下一代ASP.NET,你可以同時得到.NET運行時(runtime)的吞吐能力以及“Roslyn”編譯即服務所帶來的“無編譯”執行。這就意味着在開發中,你可以修改你的C#類,然後輕輕按下瀏覽器的刷新鍵來查看修改效果。這將是結合.NET開發優勢與“刷新,然後走你”(refresh-and-go)動態特性的開發體驗。
注意:這不是ASP.NET網站或者Razor視圖(View)編譯的方式——這裏,所有的一切都在內存裏編譯並存儲。你可以使用Visual Studio或者Sublime來開發,甚至可以喪心病狂地使用記事本來開發。(當然,如果你想讓編譯生成的文件出現在硬盤上,你也可以做到。)
請看下面,看到我的Web應用的bin文件夾沒?裏面根本沒有編譯生成的文件,因爲它們不會出現在你的硬盤上。在內存中完成所有工作可以使編譯器更高效、更容易地完成任務。這種方式使得你不需要讀入源代碼,輸出動態鏈接庫(DLLs),然後再載入動態鏈接庫。
如果你願意,當你構建可以用於部署的Web項目時,你可以將它們構建成爲NuGet包。你將你的項目發佈後,所有該項目的依賴項都會自動隨之被部署。
你可以將ASP.NET vNext部署到已有服務器上,或者任何託管平臺上,當然,還有Azure雲服務上。
你可以啓用或者禁用針對雲環境優化的框架來保證兼容性。下一個版本的ASP.NET是模塊化的,以給你最大限度的選擇自由度。你可以自由選擇框架、自由選擇運行時(runtime)、自由選擇操作系統、自由選擇文本編輯器。
總結一下,ASP.NET vNext是:
- 針對雲環境和服務器環境進行了優化
- ASP.NET MVC以及WebAPI被統一到了同一個編程模型(programming model)中
- “無編譯”(no-compile)開發體驗
- 自帶依賴注入(Dependency Injection out of box)
- “並存”(side by side)——每個應用都有自己的運行時(runtime)以及框架隨之部署
- 一切都來自NuGet——即使是運行時(runtime)也一樣
- 完全通過.NET Foundation開源,並且接受外部開發者的貢獻
哦,對了
- ASP.NET vNext(還有Roslyn)可以在Mac和Linux上的Mono平臺上運行。雖然Mono不是微軟自己的項目,我們仍會與Mono團隊合作。另外Mono會被加入到我們的測試矩陣(test matrix)裏。我們的目標是——“能用”(“just work”)。
後面幾個月還會陸續有新的信息和細節放出。