前兩天,微軟發佈了 Visual Studio 2015 CTP 5,全稱爲 Visual Studio 2015 Community Technology Preview 5,意爲社區技術預覽版,以前的版本爲:Visual Studio 2015 Preview,多了一個 CTP,雖然都爲預覽版,但此次 CTP 的版本發佈,顯然離 VS2015 的正式版本發佈已經不遠了。html
先貼一個重要連接:Visual Studio 2015 CTP 5 更新說明git
上面的文章中詳細說明了 VS2015 各個版本更新內容,除了 VS2015 IDE 的發佈,微軟還發布了 ASP.NET 5 Beta2,信息量很大。github
前天的時候,根據上面文章中的連接地址,而後我就火燒眉毛的下載了,但下載以後發現是這個玩意:vs14.ctp_pro_enu.iso(4.38G),我當時沒怎麼注意,下載以後看一下名字爲 VS14,VS14 不是早就改名爲 VS2015 了嗎?後面還有一個 Pro(能夠理解爲專業版),當時有很強烈的預感,我下錯了,果真,在安裝的時候就報錯了,說是已經安裝了什麼的,具體不記得詳細信息了,而後我就回過頭去找下載連接(已通過去了好幾個小時),肯定就是這個版本的下載連接,難道是微軟的編輯把下載的連接地址搞錯了?後來去 MSDN 搜 VS2015 CTP 版本的下載地址,可是搜了很久,也沒找到,再後來就不了了之了。web
奇怪的是,昨天的時候,無心間再去點擊 VS2015 CTP 版本說明的那篇文章,發現竟然更新了東西,而後多了下面的下載內容:json
我很肯定的是,前天的時候我並無看到這個下載說明,當時下載 vs14.ctp_pro_enu.iso 的時候,是在版本說明中找到的下載連接,而後點擊上面的 Microsoft Visual Studio Ultimate 2015 CTP iso 下載地址,看到了下載內容名稱:vs2015.ctp_ult_enu.iso(4.81G),雖然又是四個多G,但看名字知道此次有譜了,內心總算踏實了,又是幾個小時過去了。。。ide
終於下載好了,下面開始安裝:this
又是幾個小時過去了。。。spa
在安裝過程當中有一次報錯問題,當時沒來得及截圖,從新安裝就行了,好在 VS2015 能夠記憶安裝狀態,從新安裝的話,能夠接着以前的進行安裝,不須要重複安裝了,節約了不少的時間,安裝成功:.net
先說一下幾個變化,首先看一張圖:orm
若是你以前用過 VS2015 Preview 版本的話,應該會感受有所不一樣,對,沒錯,.NET Framework 版本沒有了 4.5.3,增長了 .NET Framework 4.6,而後模版中的 ASP.NET Web Application 去掉了 vNext 的標籤,如今只有 ASP.NET 5 Class Library 和 ASP.NET 5 Console Application 還保留着,建立 ASP.NET Web Application 項目,以後的 Web 選擇項和以前的 VS2015 Preview 版本同樣,而後選擇 ASP.NET 5 Starter Web 選項進行建立。
在 ASP.NET 5 Beta2 更新說明 中(也就那幾個),最重要的就是 ASP.NET 5 項目(包含 Web、Class Library 和 Console Application)能夠引用非 ASP.NET 5 類庫項目,說明:
Now, you can add a reference to a standard C# project.
(In previous releases, the Add Reference dialog only supported referencing other ASP.NET 5 projects.)
這對開發者很是重要,雖然知道微軟遲早會兼容,但 Preview 版本用於生產環境顯然是不行的,此次 CTP 版本是能夠進行嘗試了,以前曾放棄 ASP.NET 5,很大一部分緣由就是不能引用非 ASP.NET 5 類庫項目,那有人會說,你不能用 ASP.NET 5 Class Library 嗎?固然普通場景下是能夠的,但 ASP.NET 5 Class Library 有個問題就是不能添加服務引用,好比你調用 WCF,這個在 ASP.NET 5 Class Library 項目中就不能實現,如今他們之間的類庫能夠引用,那就能夠進行實現了,服務引用用非 ASP.NET 5 類庫項目,而後再在 ASP.NET 5 Class Library 項目中進行引用它。
引用示意圖:
ClassLibrary1 爲 ASP.NET 5 Class Library 項目,ClassLibrary2 爲非 ASP.NET 5 Class Library 項目,須要注意的是 ClassLibrary2 不能引用 ClassLibrary1,另外,VS2015 CTP 版本中的 References 下面的圖標好像也變化了,ClassLibrary1 的 project.json 配置:
{ "version": "1.0.0-*", "dependencies": { }, "frameworks": { "aspnet50": { "dependencies": { "ClassLibrary2": "1.0.0-*" } }, "aspnetcore50": { "dependencies": { "System.Runtime": "4.0.20-beta-22416" } } } }
須要注意的是,以前咱們在 ASP.NET 5 Class Library 項目中添加引用項,都是在 dependencies 節點中進行添加的,而添加非 ASP.NET 5 Class Library 項目的引用項,是在 frameworks 節點下的 dependencies 進行添加。
說到這,發現 VS2015 CTP 5 沒什麼坑啊,頂可能是下載連接搞錯了,多花了幾個小時,確實是這樣,其實「坑」就一個,也是讓我很是「不爽」的地方。
用安裝成功的 VS2015 CTP 打開以前的項目,首先映入眼簾的是這樣:
什麼意思?上面有提到在 VS2015 CTP 中沒有了 .NET Framework 4.5.3(VS2015 Preview 中的版本),取而代之的是 .NET Framework 4.6,須要更改項目的 .NET Framework 版本,沒辦法,只能任由它更改了,另外,VS2015 CTP 也會時不時的給你冒出下面的「東西」:
太任性了,拿 VS2015 CTP 一點辦法都沒有,只能祈禱少遇到這個問題。
好了,更改成 .NET Framework 版本後,從新編譯項目,出現了下面的這種狀況:
當時,我和個人小夥伴都驚呆了,我滴媽媽呀,近 200 個錯誤,這是個什麼狀況????
冷靜下來,查看具體錯誤信息,發現基本上都是字符串拼接的錯誤,示意代碼:
var fullName = "\{customer.FirstName} \{customer.LastName}";
這是 C# 6.0 中增長的語法特性,難道 VS2015 CTP 就不支持了?很不解,很是不解,這個問題困擾了我好久,我就差一點把 VS2015 CTP 給卸了,而後再重裝 VS2015 Preview,由於新項目中大量用到了這個語法特性(寫起來很是方便),若是不支持的話,須要從新用 Format 實現,個人天哪,想一想都是一件恐怖的事,並且項目中不僅用到了這一個語法特性,還有不少,好比下面:
string[] names = new string[] { "Steve", null, "John" }; int length = names[1]?.Length ?? 0; public string Location { get; set; } = "NYC";
可是,這些語法並無報錯,這就奇怪了,難道 VS2015 CTP 只移除了字符串拼接的語法?而後我就去找相關資料,又反覆看了 VS2015 CTP 中的版本說明,絲毫沒有找到有關 C# 6.0 語法特性更改的文字,最後無心間搜索到一篇文章:C# 6 PREVIEW: STRING INTERPOLATION。
注意文章最後有個 Note 說明:
「Note: This describes the syntax that works in the Preview. However, we’ve decided to change the syntax, to even better match that of format strings. In a later release you’ll see interpolated strings written like this:」
var s = $"{p.Name,20} is {p.Age:D3} year`s` old";
微軟一句話,咱們把特性更改了,怎麼了?此處略去1萬字的xxxxxxx。。。
其餘不想說了,下面記錄下,若是你升級了 Visual Studio 2015 CTP 5 版本,你的項目須要作哪些調整:
原來爲:
<system.web> <compilation targetFramework="4.5.3"/> <httpRuntime/> </system.web>
更改成(暫時未有 .NET Framework 4.6 下載,.NET Framework 4.6 Preview 實際版本爲 4.5.3):
<system.web> <compilation targetFramework="4.5"/> <httpRuntime/> </system.web>
var fullName = "\{customer.FirstName} \{customer.LastName}";
更改成:
var fullName = $"{customer.FirstName} {customer.LastName}";
using System.Math;
更改成:
using static System.Math;
其餘暫時未發現,歡迎補充。
哎,要改代碼了,此處再略去1萬字的xxxxxxx。。。