Visual Studio 2017正式已经于2017.3.7号正式发布,选在这一天发布也是为了纪念Visual Studio 二十周年。MVP 2017技术峰会将于这个周末(3.17)在北京举办,由于正在外地出差不能前往参加很是遗憾。我是从Visual Studio 6一路走过来的一线开发人员,亲历.NET (自2002年接触)开发这15年的变化。从Visual Studio 2003的ASP.NET Form到ASP.NET MVC,最后到AngularJS +Bootstrap,从Windows Forms到WPF。走技术的变更与业务领域结合的路线,一直对.NET开发很有信心。

安装Visual Studio 2017

从微软网站下载安装文件visual_studio_enterprise_2017_x86_x64.exe,只有不到1MB大小。这只是一个引导程序(Web Installer),启动之后勾选需要的组件即可进行安装。

我只勾选了.NET desktop Development和ASP.NET and web development两项,右下角显示需要5.33G磁盘空间。点击Install之后开始安装。

我的电脑配置是i5 6400,128G固态硬盘,安装过程耗费时间约10分钟。安装完成之后需要重启一下电脑。

启动之后如下图所示,看到期待的.NET Core和.NET Standard。J

Visual Studio 2017 新功能

1. Filtered IntelliSense

IntelliSense可以大量节省敲击代码的时间。以往的IntelliSense会根据当前字母所在的上下文自动判断,并查找合适的匹配字符供用户挑选。新版本的加入Filtered特性,下面的几点按钮依次是

  • Locals and Parameters –  局部变量
  • Constants –  常量
  • Properties –  属性
  • Fields –  字段
  • Methods –  方法
  • Interfaces – 接口
  • Classes –  类型
  • Modules –  模块
  • Structures – 结构
  • Enums – 枚举
  • Namespaces – 命名空间
  • Keywords – 关键字
  • Snippets – 脚本

点击相应的按钮会过滤IntelliSense的结果,以便更精确的查找需要的数据。

2. Predictive IntelliSense

这一项功能也非常实用,参考下图

当我们在dtReturns.Rows.Add方法的参数中输入值时,它会智能的匹配当前上下文环境中匹配的数据。因为Rows.Add方法的参数接受数组类型或是DataRow,Predictive IntelliSense会找出当前环境中能够匹配此参数类型是的数据项。再参考一个例子:

我们在属性上面输入特性(Attribute),Predictive IntelliSense会根据当前的属性类型提示出StringLength特性。

当我们在在int类型的属性上添加特性时,它提示出MaxLength特性,正好可应用于当前的属性。

3. Find All References

这个特性在ReSharper中早已经存在,Visual Studio终于将它内置进来。

ReSharper的Find All References可以做的更深一点,对于查找所有字段或属性的引用,它将Set或Get分开显示,也就是可以看出有哪些地方是引用变量的值,

有哪些地方是设置变量的值。在大型系统调试变量的值时,这个特性会非常有用。

4. Run-To-Click

这个功能强化了以前的Run to Cursor。以前我们需要点击鼠标右键,选Run to Cursor,现在只需要在相关的行前面,点击小绿色按钮,将可实现将代码运行到此处。

5. Run-To-Click Performance Tips

这个功能第4点属于同一组Enhancement,参考下图:

当我们勾选了Run to Click之后,程序运行到当前行,在当前行的代码之后,会显示<1ms elapsed这样的字样,表示运行到这一句耗费的时间。

6. Open Folder

在Start Page中有一项Open Folder,可用于打开Windows Explorer,点击之后打开默认位置C:\Users\Administrator\Documents\Visual Studio 2017\Projects

7. Installation Nickname

Visual Studio 2017有三个版本Enterprise,Professiona, Community,我们可以在同一台机器中同时安装这三个版本的Visual Studio。在安装时只需要指定不同的别名(Nickname)即可。

这会导致一个扩展插件,需要分别勾选要安装到的Visual Studio版本,如下图所示。

8. Improved Code Navigation

Visual Studio改善Go to All,相比之前的Go To,可以更有效率的找到需要的数据。我们在任意地方敲击Ctrl + ,

Visual Studio 可以帮忙找到文件,类型,符号等匹配项,快速导航到需要的地方。

9. Attach to Process Filter

附加到进程现在支持按进程名称过滤,参考下图。

在可用进程(Available Processes)列表的右上角,有一个带Filter Processes水印的文本框,可以对进程名称过滤。

10. The New Exception Helper

经过改善的异常辅助器如下图所示。

我们点击Edit Conditions可编辑中断条件。

其实还有做的更好的OzCode的Exception Helper,它可以快速帮忙定位到哪里抛出异常(Throw Exception),哪里处理异常(Handle Exception)。在大量系统中查找数据异常非常方便。

11. Live Unit Testing

当跑一次单元测试之后,Visual Studio可以显示代码覆盖率,通过代码行前面的绿色勾或红色叉,可以区别分运行过的代码路径与没有跑的代码路径。

这个功能也不算新鲜,dotCover多年以前就具备这个功能。

12. Redgate Data Tools Included with Visual Studio

Redgate的SQL 工具直接集成到Visual Studio中以辅助快速编写SQL语句和管理与部署数据库。它们分别是

· Redgate ReadyRoll Core, 数据库升级与自动化部署

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

· Redgate SQL Search, 数据库搜索

Redgate 开发了大量的.NET开发人员必备的工具,如.NET Reflector,SQL Prompt,dotPerformance。如今直接集成到Visual Studio中变成官方支持版本,可见其相当完善,市场占有率高。

当年Visual Studio集成了水晶报表,让Crystal Report成为报表制作的工业标准。微软之后开发出自己的SQL Server Reporting Services,Crystal Report便不再直接集成在Visual Studio安装包中。

13. TypeScript 2.1

项目中用到AngularJS,JavaScript也是由TypeScript生成。TypeScript是一种设计时语言,最终是为了生成JavaScript,它有强类型语言的特点,配合Visual Studio开发工具,项目中JavaScript代码的可维护性和质量大大提升。

Array 数组类型

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 可选参数

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

代码重构。这项功能早就集成在Resharper中。

这一功能可以将对象的赋值语句块转化为对象初始化写法。

out内联

空值检查

15. Chrome Debugging Support

Visual Studio可以调试运行在Chrome中的JavaScript脚本。也可以调试由TypeScript生成的JavaScript脚本。在Chrome中启动调试时,只需要在相应的脚本文件中放入

Debugger中断,再启动Chrome的调试模式,Chrome会在代码执行到debugger时中断,此时可单步调用TypeScript文件。

Visual Studio 2017十五项新功能体验的更多相关文章

  1. VS2017十五项新功能体验

    Visual Studio 2017十五项新功能体验 Visual Studio 2017正式已经于2017.3.7号正式发布,选在这一天发布也是为了纪念Visual Studio 二十周年.MVP ...

  2. Visual Studio Developer Assistant 3月新功能展示

    Visual Studio Developer Assistant 3月添加了以下新功能: https://visualstudiogallery.msdn.microsoft.com/a116671 ...

  3. Visual Studio 2017 针对移动开发的新特性介绍

    欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~ Visual Studio是世界上最好的IDE之一,如果是 .NET世界,那就没有之一了(^_^),而最近推出的Visual S ...

  4. Visual Studio 2017中如何创建安装打包项目

    从Visual Studio 2012开始,微软就不在环境中自动集成安装打包项目了,如果还想使用,需要手动下载安装,这里以在Visual Studio 2017上安装打包项目为例进行介绍,步骤如下: ...

  5. .NET十五周年生日快乐 (3月7日发布Visual Studio 2017正式版?)

    今天 是.NET 对世界首次亮相15 周年.2002 年 2 月 13 日,第一版本的.NET 发布作为 Visual Studio.NET 的一部分.它仿佛就在昨天为微软建设成"下一代 W ...

  6. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  7. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...

  8. 用于Azure功能的Visual Studio 2017工具

    今天我们很高兴地宣布发布第一个预览的Visual Studio 2017工具的Azure功能.这个预览介绍了一些令人兴奋的变化,我们以前的版本.此外,除了支持Visual Studio 2017之外, ...

  9. Visual Studio 2017 新特性

    全新的安装体检 VS2017更好的支持了按需安装的特点,用户可以仅选择需要的功能安装,节省了不少的Disk 最小的安装仅有几百兆,但也支持20多种编程语言的编辑和源码管理 支持创建自定义的离线安装包 ...

随机推荐

  1. JavaScript中this的指向问题

    this是面向对象语言中一个重要的关键字,理解并掌握该关键字的使用对于我们代码的健壮性及优美性至关重要.而javascript的this又有区别于Java.C#等纯面向对象的语言,这使得this更加扑 ...

  2. UTF编码检测

    最近工作上正好需要进行UTF编码检测,自己写了一个,分享给大家,希望可以帮得上有需要用的朋友 public bool isUtf8(byte[] rawText) { bool result = tr ...

  3. TFS 测试用例导入、导出工具

    TFS的测试管理提供了测试规划.创建.运行以及进度跟踪等功能.测试人员通过浏览器就几乎可以完成手个测试的全部过程. 用过TFS测试用例的朋友们,很多人应该都知道,在TFS的Portal中以及相应的数据 ...

  4. Asp.net mvc 知多少(六)

    本系列主要翻译自<ASP.NET MVC Interview Questions and Answers >- By Shailendra Chauhan,想看英文原版的可访问http:/ ...

  5. vs2010 入门程序

    #include <stdio.h> int main(){ printf("hello world!\n"); getchar(); //此处避免执行完程序自动退出 ...

  6. 设置/修改wampserverd默认项目地址

    打开WampServer安装目录下bin\apache\Apache2.4.4\conf\文件夹打开httpd.conf 首先我们安装完wampserver后一般默认的项目存放地址如下: " ...

  7. B. Pasha and Phone

    B. Pasha and Phone time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  8. 【录教程必备】推荐几款屏幕录制工具(可录制GIF)

    我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...

  9. shell-2

    环境变量配置文件: cd ~  直接回到根目录 位置变量:$0 代表当前执行的文件名$1-$9 代表输入的参数分别一次${10} 注意:双引号和单引号双引号是弱引用,会解析里面的特殊字符所代表的含义单 ...

  10. [故障公告] 13:52-14:03,访问量突增,博客web服务器CPU 100%

    13:52-14:03,由于访问量突增,博客web服务器全线CPU 100%,造成博客站点不正常访问,由此给您带来麻烦,请您谅解. 为了迎接访问量的增长给web服务器CPU带来的巨大压力,上周我们已经 ...