Visual Studio 2017正式已經(jīng)于2017.3.7號正式發(fā)布,選在這一天發(fā)布也是為了紀(jì)念Visual Studio 二十周年。MVP 2017技術(shù)峰會將于這個周末(3.17)在北京舉辦,由于正在外地出差不能前往參加很是遺憾。我是從Visual Studio 6一路走過來的一線開發(fā)人員,親歷.NET (自2002年接觸)開發(fā)這15年的變化。從Visual Studio 2003的ASP.NET Form到ASP.NET MVC,最后到AngularJS +Bootstrap,從Windows Forms到WPF。走技術(shù)的變更與業(yè)務(wù)領(lǐng)域結(jié)合的路線,一直對.NET開發(fā)很有信心。

安裝Visual Studio 2017

從微軟網(wǎng)站下載安裝文件visual_studio_enterprise_2017_x86_x64.exe,只有不到1MB大小。這只是一個引導(dǎo)程序(Web Installer),啟動之后勾選需要的組件即可進(jìn)行安裝。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

我只勾選了.NET desktop Development和ASP.NET and web development兩項(xiàng),右下角顯示需要5.33G磁盤空間。點(diǎn)擊Install之后開始安裝。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

我的電腦配置是i5 6400,128G固態(tài)硬盤,安裝過程耗費(fèi)時間約10分鐘。安裝完成之后需要重啟一下電腦。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

啟動之后如下圖所示,看到期待的.NET Core和.NET Standard。J

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

Visual Studio 2017 新功能

1. Filtered IntelliSense

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

IntelliSense可以大量節(jié)省敲擊代碼的時間。以往的IntelliSense會根據(jù)當(dāng)前字母所在的上下文自動判斷,并查找合適的匹配字符供用戶挑選。新版本的加入Filtered特性,下面的幾點(diǎn)按鈕依次是

  • Locals and Parameters –  局部變量

  • Constants –  常量

  • Properties –  屬性

  • Fields –  字段

  • Methods –  方法

  • Interfaces – 接口

  • Classes –  類型

  • Modules –  模塊

  • Structures – 結(jié)構(gòu)

  • Enums – 枚舉

  • Namespaces – 命名空間

  • Keywords – 關(guān)鍵字

  • Snippets – 腳本

點(diǎn)擊相應(yīng)的按鈕會過濾IntelliSense的結(jié)果,以便更精確的查找需要的數(shù)據(jù)。

2. Predictive IntelliSense

這一項(xiàng)功能也非常實(shí)用,參考下圖

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

當(dāng)我們在dtReturns.Rows.Add方法的參數(shù)中輸入值時,它會智能的匹配當(dāng)前上下文環(huán)境中匹配的數(shù)據(jù)。因?yàn)镽ows.Add方法的參數(shù)接受數(shù)組類型或是DataRow,Predictive IntelliSense會找出當(dāng)前環(huán)境中能夠匹配此參數(shù)類型是的數(shù)據(jù)項(xiàng)。再參考一個例子:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

我們在屬性上面輸入特性(Attribute),Predictive IntelliSense會根據(jù)當(dāng)前的屬性類型提示出StringLength特性。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

當(dāng)我們在在int類型的屬性上添加特性時,它提示出MaxLength特性,正好可應(yīng)用于當(dāng)前的屬性。

3. Find All References

這個特性在ReSharper中早已經(jīng)存在,Visual Studio終于將它內(nèi)置進(jìn)來。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

ReSharper的Find All References可以做的更深一點(diǎn),對于查找所有字段或?qū)傩缘囊?,它將Set或Get分開顯示,也就是可以看出有哪些地方是引用變量的值,

有哪些地方是設(shè)置變量的值。在大型系統(tǒng)調(diào)試變量的值時,這個特性會非常有用。

4. Run-To-Click

這個功能強(qiáng)化了以前的Run to Cursor。以前我們需要點(diǎn)擊鼠標(biāo)右鍵,選Run to Cursor,現(xiàn)在只需要在相關(guān)的行前面,點(diǎn)擊小綠色按鈕,將可實(shí)現(xiàn)將代碼運(yùn)行到此處。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

5. Run-To-Click Performance Tips

這個功能第4點(diǎn)屬于同一組Enhancement,參考下圖:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

當(dāng)我們勾選了Run to Click之后,程序運(yùn)行到當(dāng)前行,在當(dāng)前行的代碼之后,會顯示<1ms elapsed這樣的字樣,表示運(yùn)行到這一句耗費(fèi)的時間。

6. Open Folder

在Start Page中有一項(xiàng)Open Folder,可用于打開Windows Explorer,點(diǎn)擊之后打開默認(rèn)位置C:\Users\Administrator\Documents\Visual Studio 2017\Projects

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

7. Installation Nickname

Visual Studio 2017有三個版本Enterprise,Professiona, Community,我們可以在同一臺機(jī)器中同時安裝這三個版本的Visual Studio。在安裝時只需要指定不同的別名(Nickname)即可。

這會導(dǎo)致一個擴(kuò)展插件,需要分別勾選要安裝到的Visual Studio版本,如下圖所示。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

8. Improved Code Navigation

Visual Studio改善Go to All,相比之前的Go To,可以更有效率的找到需要的數(shù)據(jù)。我們在任意地方敲擊Ctrl + ,

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

Visual Studio 可以幫忙找到文件,類型,符號等匹配項(xiàng),快速導(dǎo)航到需要的地方。

9. Attach to Process Filter

附加到進(jìn)程現(xiàn)在支持按進(jìn)程名稱過濾,參考下圖。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

在可用進(jìn)程(Available Processes)列表的右上角,有一個帶Filter Processes水印的文本框,可以對進(jìn)程名稱過濾。

10. The New Exception Helper

經(jīng)過改善的異常輔助器如下圖所示。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

我們點(diǎn)擊Edit Conditions可編輯中斷條件。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

其實(shí)還有做的更好的OzCode的Exception Helper,它可以快速幫忙定位到哪里拋出異常(Throw Exception),哪里處理異常(Handle Exception)。在大量系統(tǒng)中查找數(shù)據(jù)異常非常方便。

11. Live Unit Testing

當(dāng)跑一次單元測試之后,Visual Studio可以顯示代碼覆蓋率,通過代碼行前面的綠色勾或紅色叉,可以區(qū)別分運(yùn)行過的代碼路徑與沒有跑的代碼路徑。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

這個功能也不算新鮮,dotCover多年以前就具備這個功能。

12. Redgate Data Tools Included with Visual Studio

Redgate的SQL 工具直接集成到Visual Studio中以輔助快速編寫SQL語句和管理與部署數(shù)據(jù)庫。它們分別是

· Redgate ReadyRoll Core, 數(shù)據(jù)庫升級與自動化部署

· Redgate SQL Prompt Core, SQL語句智能提示

· Redgate SQL Search, 數(shù)據(jù)庫搜索

Redgate 開發(fā)了大量的.NET開發(fā)人員必備的工具,如.NET Reflector,SQL Prompt,dotPerformance。如今直接集成到Visual Studio中變成官方支持版本,可見其相當(dāng)完善,市場占有率高。

當(dāng)年Visual Studio集成了水晶報表,讓Crystal Report成為報表制作的工業(yè)標(biāo)準(zhǔn)。微軟之后開發(fā)出自己的SQL Server Reporting Services,Crystal Report便不再直接集成在Visual Studio安裝包中。

13. TypeScript 2.1

項(xiàng)目中用到AngularJS,JavaScript也是由TypeScript生成。TypeScript是一種設(shè)計時語言,最終是為了生成JavaScript,它有強(qiáng)類型語言的特點(diǎn),配合Visual Studio開發(fā)工具,項(xiàng)目中JavaScript代碼的可維護(hù)性和質(zhì)量大大提升。

Array 數(shù)組類型

TypeScript

JavaScript

var array: string[] = ['test', 'dummy'];

var first: string = array[0];

var array = ['test', 'dummy'];

var first = array[0];

Primitive 基本類型

TypeScript

var name = { firstName: 'Homer', lastName: 'Simpson' };

name.firstName = 2; //This gives compile time error

JavaScript

var name = { firstName: 'Homer', lastName: 'Simpson' };

name.firstName = 2; //No Error in JavaScript

Type Inference類型決斷

TypeScript

var dummy; //any type

var num = 10; //number

var str = 'Hello TypeScript'; //string

var bln = true; //boolean

var stringArray = ['Homer', 'Simpson']; //string[]

JavaScript

var dummy;

var num = 10;

var str = 'Hello TypeScript';

var bln = true;

var stringArray = ['Homer', 'Simpson'];

TypeScript

var addFunction = function (n1: number, n2: number, n3: number) {

var sum = n1 + n2 + n3;

return sum;

};

var str1: string = addFunction(10, 20, 30); //Gives compile time error as return type of a function is number and is being assigned to a string

var sum: number = addFunction(10, 20, 30); // This works

var result = addFunction(10, 20, 30); // This also works

JavaScript

var addFunction = function (n1, n2, n3) {

var sum = n1 + n2 + n3;

return sum;

};

var str1 = addFunction(10, 20, 30);

var sum = addFunction(10, 20, 30);

var result = addFunction(10, 20, 30);

Optional Type 可選參數(shù)

TypeScript

var addFunction = function (n1: number, n2: number, n3?: number) : number {

var sum = n1 + n2 + n3;

return sum;

};

var sum: number = addFunction(10, 20);

JavaScript

var addFunction = function (n1, n2, n3) {

var sum = n1 + n2 + n3;

return sum;

};

var sum = addFunction(10, 20);

Classes and Interface 類和接口

TypeScript

class Student {

private firstName: string;

private lastName: string;

yearOfBirth: number; //Public scope by default

schoolName: string;

city: string;

//Constructor

constructor(firstName: string, lastName: string, schoolName: string, city: string, yearOfBirth: number) {

this.firstName = firstName;

this.lastName = lastName;

this.yearOfBirth = yearOfBirth;

this.city = city;

this.schoolName = schoolName;

}

//Function

age() {

return 2014 - this.yearOfBirth;

}

//Function

printStudentFullName(): void {

alert(this.lastName + ',' + this.firstName);

}

}

JavaScript

var Student = (function () {

//Constructor

function Student(firstName, lastName, schoolName, city, yearOfBirth) {

this.firstName = firstName;

this.lastName = lastName;

this.yearOfBirth = yearOfBirth;

this.city = city;

this.schoolName = schoolName;

}

//Function

Student.prototype.age = function () {

return 2014 - this.yearOfBirth;

};

//Function

Student.prototype.printStudentFullName = function () {

alert(this.lastName + ',' + this.firstName);

};

return Student;

})();

代碼來自于TypeScript - 101 : The Basics,地址是https://www.codeproject.com/Articles/802722/TypeScript-The-Basics

14. Quick Actions and Refactorings

代碼重構(gòu)。這項(xiàng)功能早就集成在Resharper中。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

這一功能可以將對象的賦值語句塊轉(zhuǎn)化為對象初始化寫法。

out內(nèi)聯(lián)

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

空值檢查

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

15. Chrome Debugging Support

Visual Studio可以調(diào)試運(yùn)行在Chrome中的JavaScript腳本。也可以調(diào)試由TypeScript生成的JavaScript腳本。在Chrome中啟動調(diào)試時,只需要在相應(yīng)的腳本文件中放入

Debugger中斷,再啟動Chrome的調(diào)試模式,Chrome會在代碼執(zhí)行到debugger時中斷,此時可單步調(diào)用TypeScript文件。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

http://www.cnblogs.com/JamesLi2015/p/6557717.html