所谓工欲善其事,必先利其器。尽管visual studio本身已经非常强大,但优秀的插件仍然可以帮开发者大大提高效率。
ReSharper是一款由jetbrain开发的针对C#,VB.NET,ASP.NET,XML,和XAML的编辑器。沿袭了jetbrains开发工具一贯的优良传统,ReSharper拥有高度智能的纠错,30多种高级代码重构功能,方便的单元测试工具,快速导航、检索,以及一键格式化代码,自动代码生成和模板功能等很多特性。
ReSharper和之前版本相比较,重点包括以下几点更新:JavaScript,CSS,支持和Razor视图引擎捆绑反编译器,增强导航,重新设计的设置管理,不同语言的新的代码检查功能。
以下是对Resharper的一些基本配置和使用技巧,在这里,小编和大家一起分享:
1:安装后,Resharper会用他自己的英文智能提示
替换掉 vs2010的智能提示,所以我们要换回到vs2010的智能提示
2:快捷键。
是使用vs2010的快捷键还是使用 Resharper的快捷键呢?我是使用re的快捷键
3:resharper安装后,会做几件事情
这几件事情对于除此使用者,比较麻烦,因此归纳总结一下,以资参考。
(1)、会将选项——文本编辑器——C#——常规——自动列出成员 这个选择框的勾选去掉。这样当你使用某个方法的时候,便不会提示参数,是一个很郁闷的事情。
可以手动勾上。
(2)、会将选项——文本编辑器——C#——高级——显示实时语义错误、在编辑中用下划线标识错误这两个选项去掉。这个本来没有什么,但是如果卸载了Resharper,
vs编辑器变不会实时提示错误。因此卸载Resharper后,需要把这两个选项重新勾选上。
4: use var
use implicitly typed local variable declaration
5:按 alt+enter 能解决很多问题。
下面是快捷键大全。
6: Alt+F7
将你光标所在位置的变量的所有使用以列表的方式显示出来,显示结果的窗体可以像其他窗体那样停靠。
它的优点包括:
1
2
3
4
|
可以从所有使用中挑选只显示read usage或者write usage,有时我们只是想知道某个变量在哪里被改变了。找到的位置前的图标也告诉你这点。 可以在下方预览,即使我们列出所有使用,也不想跳转到每个使用它的地方,这时预览可以帮你大忙。 当你在代码编辑器中改动了某些使用时,比如删除了某行,那么在查找结果的窗体中,会用删除线表示出来。 默认的是寻找解决方案中所有的使用,并且按照命名空间来组织,非常便于选择。 |
我现在已经记不起来在没有Alt+F7之前我是怎么查找的。反正现在我几乎不怎么样Ctrl+F了,除非我忘记了某个变量的名字。如果是这样,多半这个名字需要refactor,那也是Resharper的另一大块功能所在。也许有人对这个功能嗤之以鼻,但是用过CAB的人都知道,订阅和发布某个事件的签名,完全是字符串,如果你不用搜索来找到它的话,你都不知道这个控件的鼠标点下去,到底有多少个处理程序在背后开始工作了。用了Alt+F7来搜索这个字符串,等于在查找背后所有的调用者。
不过提示你,当光标停留在一个类型上时,要慎用Alt+F7,假设是一个string,你应该能想象到得找到多少个使用
7:威力无比的Alt+Enter回车
万能的Alt+Enter能够帮你完成很多编写代码过程中的dirtywork,总结起来大概是这么些:
-
帮你实现某个接口或抽象基类的方法;
-
提供你处理当前警告的一些建议;
-
为你提供处理当前错误的一些建议(不一定是真的错误);
-
为你简化当前的臃肿代码;
8: Ctrl + F11
当我们看别人的代码,或者是看自己的代码的时候,总是觉得代码太多,于是我们就用 region来把代码进行了封装注释,可是这样之后别人看代码就很郁闷,Resharper的 File Structure功能,就可以把region和你的方法都展示出来。
说了这么多,其实就是把对象浏览器和region的长处结合起来,既可以清晰的分类,又能一目了然的找到需要的方法。Resharper这时帮上你的大忙了。用Ctrl+F11,就弹出一个像右边这样的窗口来。
这里面,按照你的region来显示,这样读你的代码的人也受益了。每个方法的参数,返回值都如UML一样列出来。
1
2
3
4
|
如果需要浏览到某个方法,直接双击它的名字; 如果要把某几个方法装进一个新的region,则可以选中方法,点工具栏上的像框的那个图标;点叉则会删除这个region并把相应的方法移到外面来。 如果要调整某个方法的位置,比如把它移到别的region里面去,只需要在这里拖动这个方法即可。 更可喜的是,你想要的从这里浏览、找到所有使用和重构的功能也在这里提供了,在某个方法上右键你就能开始操作。 |
9:重构才是王道(上)
重构是一种精神,证明你在致力于提供高效的、精炼的、健壮的代码,而不是凌乱的、晦涩的、漏洞百出的代码。
在Visual Studio 2005中,微软第一次提供了重构工具。但是不够,远远不够。我们需要的重构是非常广义的,我们想要对代码进行快速的调整,快到我在想什么我的工具就能做什么。这才是追求重构的境界。所以在这个意义上,几乎Resharper为你提供了巨大的生产力。
Visual Studio 2005提供的重构包括了如下:
1
2
3
4
5
6
7
|
封装字段 提取方法 提取接口 提升局部变量 移除参数 重命名 重新排列参数 |
这些方法在Resharper中全部都支持(但Resharper的重构远不止这些),它们对应的变成了:
1
2
3
4
5
6
7
|
封装字段 —— Introduce Field 提取方法 —— Extract Method 提取接口 —— Extract Interface(另增加了Extract Superclass提取为基类) 提升局部变量 —— Introduce Variable 移除参数 —— 移到Change Signature(改变方法签名)中 重命名 —— Rename(Resharper会根据对象的类型名称,提供你几个可选的最合适的名称) 重新排列参数 —— 移到Change Signature(改变方法签名)中 |
我知道很多人都声称自己E文不好,但是,这确实都是很简单的单词,难不倒任何人的。这些重构的功能是人所共知的,下面就告诉大家一些Resharper特有的,首先,重构的快捷键是Ctrl+Shift+R:
1、对于类,除了提取接口、基类,你还可以移动它到其他的命名空间和移动到别的文件里,这是一个实用的功能,也许你不信,但是我这真的有个人,把所有的business entity都写在一个DataObject.cs里面。你难以想象,我打开它时嘴张了多大。
2、对于字段,提供了:
Safe Delete,会检测所有使用到的地方,并询问如何删除;
Pull Member Up和Push Member Down,可以把这个字段在基类和继承类中移动;
Use base type where possible,尽可能的使用基类,由于ArcGIS平台是基于com组件的,很多时候我们需要的是IGeometry, IPointCollection这样的接口所公开的属性或者方法,于是你没有必要保存一个polygon对象,而可以使用基类型;
Encapsulate Field,封装字段,但是这个功能远没有另一个提供同样功能的操作有用。我可以在后文中来讲。
3、对于方法,提供了:
与字段类似的功能,此外;
Change Signature,更改函数签名,包括更改名称,返回值类型,参数的各种信息,添加和删除参数,相当实用。如果你是在重写方法上操作,会提示你是否到基类中更改。
Make Static,如果Resharper检测到这个方法并没有与非静态成员相关联的话,往往会自动地提示你(以黄色横杠的形式出现)可以改为static,如果你自作主张的对一些方法进行修改也无不妥,但后果自负。
Extract class from parameter,如果你的参数有七个八个,那是否考虑用一个类来封装这些参数呢,于是这个功能应运而生。
Method to Property,顾名思义,如果还在使用GetField()或者SetField(..)的话,你一定是从非.net星来的。
4、在方法体内部:
Extract Method,不用介绍了吧。
Introduce Variable/Parameter/Field,取决于你光标所在的对象,可以提供转化的功能。
Inline Variable:就是把:
IPoint point = new PointClass();
point.PutCoords(_point.X, _point.Y);
变成这样子:
new PointClass().PutCoords(_point.X, _point.Y); //这是个糟糕的例子
5、重命名:
为什么重命名值得挑出来讲,因为Resharper提供了命名建议这一金子般的功能。于是,想改名为易读性强的名字,不是那么费脑子的事情了。Resharper会根据这个变量的类型,为你提供几个备选名字,名字列表是列在光标位置上的(对方法重命名会弹出对话框),你只需要用方向键选择并敲回车即可,这种名字多是将类型的名字首字母改为小写得来的,甚至刨根到基类的类型名,你还可以在此基础上加以改进。如果你还在用i,j这种晦涩的名称,请迅速的把他们改为outIndex, pointCount之类可读的名称。
Resharper其实提供了更先进的功能,在你命名一个变量时,就有快捷键为你提供备选名字,但是Ctrl+Space是我们宝贵的输入法切换键,于是,我对变量名的敲定,往往是先起了一个较烂的,然后重命名的。
还有一些更广义上的,帮助你对代码进行调整的功能,我另写一篇吧,不然太长了。
10:重构才是王道
插入代码
Resharper的Alt+Insert快捷键提供给你插入代码的功能。由于这两个键非常难按(这是我的感受),真正在使用的时候,我用的是Alt-R-C-G,意指打开Resharper菜单——Code——Generate,都只需要你的左手,这样你可以右手一边比划,一边还在写代码,多酷啊。
生成的代码中最常用的是构造函数和属性,当你没有私有字段的时候,只会生成一个空的默认构造函数,而且没有生成属性的功能。在你有私有字段的情况下,生成之前会让你选择哪些私有字段需要作为构造函数的参数,并生成初始化的代码,这样编写重载极其方便。生成属性也类似。
再次常用的就是重写基类或者接口的方法了。选择Implement Interface Member或者Override Inheritate Member,Resharper会查找当前类的基类或接口,然后按继承层次列出来,根据你的选择重写或实现这些方法。
不是太常用的是生成Equals和GetHashCode方法,在我的应用场景中很少重写它们。但是根据《.NET设计规范》,不管是值类型还是引用类型的Equals都建议重写,并且应该重写GetHaseCode方法,因为它们相互依赖。如果你有这个需求,那么生成这三个函数一定能够帮你的大忙。
包围代码
Visual Studio也提供了外侧代码这个功能,你可以按Ctrl+K,Ctrl+S来激活这个功能,虽然我并没有任何鄙视Visual Studio的意思,但是Resharper的快捷键确实更加合理(我在按下Ctrl的时候真的很难按下S),条目也更加清晰。Resharper中这个功能的快捷键是Ctrl+Alt+J,然后你就可以选择将当前行的代码包围到try-catch块或者using中了。这是很高效的方法,我们倾向于在开发的早期尽量不捕获异常,而在中后期才加入异常处理机制。于是你某一个时期有大量的工作是把他们扩到try-catch块中。而你要使用支持dispose对象时,最好的方法是使用using块。(卖蛋糕的,当我知道我的代码不是最优的时候,我总是寝食难安),这里自然也有把代码扩到region块中的功能,也是常用功能之一。
调整方法的位置
前面我曾说过,如果要调整方法的位置,可以在代码结构窗口中拖放操作。如果你觉得只是把一个方法移动到前面去,却不得不打开代码结构窗口太过重量级,那么有轻量级的方法:当光标位于方法的名称上时,用Ctrl+Shift+上下键就可以移动方法的位置,包括方法的xml注释,但如果你用的不是三个/的xml注释而是两个/的,那么就对不起了。
其他琐碎的功能
你肯定常常会复制粘贴当前行的代码,例如在使用StringBuilder.Append的时候,Ctrl+D可以简化你Ctrl+C,Ctrl+V的工作。
曾经有一个组合键可以注释掉当前行,还有另一个是取消注释,但是我已经淡忘了,因为Ctrl+/才应该是真正属于它的快捷键,再次按下就可以取消注释。
关于Resharper的重构功能就是这些,我可能天真地把很多额外功能都算在重构里了,但是它确实能够帮助你快速的对代码进行调整和优化。所以,请不要深究我对重构的概念认识是不是混乱。
增强的浏览功能
浏览参数的方式:
输入方法的时候,我们已经习惯了由IDE提供给我们的参数提示,极大了方便了我们选择重载方法。在没有Resharper的环境下,Visual Studio已经做到了。那么为什么Resharper还要增强这个功能并大获好评的。试问,Visual Studio那窄窄的一行参数提示有没有让你觉得憋屈。我们有19寸的大屏幕,1600的分辨率,却不得不盯着那窄条条,小心翼翼的按着上下键寻找我们需要的重载。至少,开发Resharper的家伙是受不了这种憋屈的,于是大开大阖版的参数列表出现了,长长的参数重载被以列表的形式展现出来,当你在使用GDT+方法,看到巨大的参数重载时,你会从心底里发出感叹:卖蛋糕的。
同时,Resharper展示参数的快捷键变成了Ctrl+P,如果你觉得屏蔽了打印的快捷键简直是在开玩笑的话,那么问问你自己有多少次打印过自己的代码。
浏览打开过的文档:
我窃以为你已经知道了在Visual Studio中切换文档的方式,它们包括:
Ctrl+Alt+上下方向键,可以在打开的文档中切换;
Ctrl+Tab,不仅可以在文档之前切换,并可以切换到解决方案文件夹,属性视图去,需要按左右键。
但是怎么样打开最近编辑后关闭的文件呢,Visual Studio很客气的又没有提供此功能,于是留给了Resharper。在我这里这个快捷键是Ctrl+E,Ctrl+E,没错,按两次。如果你的不是,那么在Resharper-View-Recent Files菜单下看看它是什么。因为你会时常用到。打开一个文件的列表,用方向键选择并回车就会在编辑器中打开。
很多人说Resharper的性能问题,我想,一个可能的原因是打开的文档太多了,如果你有时刻关闭不需要的文档的习惯,性能或许不会那么差,并且你可以随时打开这些你关闭了的文档,就像在已经打开的文档中切换一样的方便。
我的团队中没有用到敏捷开发那些高级的东西,但是我们还是保持着每次改动都仅涉及两三个文件的好习惯,并且频繁的commite到源代码服务器上去。所以,我每次真正要编辑的文件不多,性能不是问题。
和大家分享了很多Resharper使用的技巧,点点滴滴都已经融入我日常的开发工作中了。当然很不全面,例如与Nunit的集成,由于我们不是测试驱动,所以没有任何体验,自然也不敢大放厥词;也很主观,我觉得它好,你可能觉得它不好,萝卜青菜各有所爱。再说,它也不是没有白痴的地方,在文档上点右键增加的一个Close All功能,可以关闭所有打开的文档,关闭了干什么,对着一个空白的屏幕发呆么?我觉得原生的“除此之外全部关闭”就够了。还有一个定位的功能(Locate in Solution Explorer),真是没用,如果你在VS选项中设置了,在解决方案管理器中跟踪活动项,那么VS自动就给你定位了。
不管怎么说,它带给我更快更方便的开发体验,把我从一些琐碎的,不人性化的功能中解放出来。从这一点上来说,我很希望越来越多的人喜欢上它,开始用它,并帮助它更好的发展。
Resharper和VisualStudio性能优化建议
提升性能
我们不断地确保ReSharper的正常工作在现代硬件和中型和大型的解决方案,没有任何调整。
我们相信,Visual Studio的开发人员正在努力实现同样的事情,试图通过加快ReSharper的过时的硬件,你剥夺了强大的功能,可以加快你的开发表现自己。
如果您遇到与Visual Studio和ReSharper的性能问题,应用性能优化的列表。所给出的一些技巧是ReSharper的特定的,而另一些会VS性能,你是否已经安装了ReSharper的或没有影响。
为ReSharper加速
禁用代码分析当前文件
您可以按暂时禁用代码分析当前文件的Ctrl + Alt + Shift + 8。再次按下该快捷方式将重新启用的分析。你可以发现当前文件的状态指示灯代码分析的状态:
如果您要绑定一个不同的快捷方式进行此操作,寻找ReSharper_EnableDaemon命令。
禁用代码分析特定的文件
你可以告诉ReSharper的跳过分析某些文件,而无需打开它们。例如,你可以跳过包含行之有效的算法文件,不发生大的变化。要做到这一点,到ReSharper|Options,然后选择Code Inspection | Settings。点击Project to ignore下的Add,并使用弹出的对话框中挑中的文件和文件夹跳过。您也可以跳过指定的文件的文件掩码。最有可能的,你会发现,所有的文件,你禁用代码分析的Ctrl + Alt + Shift + 8已经在那里。
关闭解决方案范围的分析
在非常大的项目,打开解决方案范围的分析可能会导致性能下降,特别是在那么强大的硬件。如果你觉得这个分析中占用太多的资源,只需将其关闭:右击Visual Studio的右下角,选择Analyze Errors in Solution或Pause Analysis。
一个对话框会弹出询问您是否要关闭提示。点'Yes',你就大功告成了。
禁用上下文行动
在ReSharper的选项,进入CodeEditing|ContextAction和CodeEditing| [语言] |上下文的动作,然后取消选中不那么对您有所帮助的选项。
加快打字
如果您遇到减速打字时,你可以在关闭ReSharper | Environment |Options|IntelliSense|CompletionAppearance:
如果这样没有帮助,切换到下内置在Visual Studio智能感知的ReSharper | Options |Environment| IntelliSense |General:
禁止格式
为了加快打字,你还可以禁用下自动格式选项的ReSharper | Options | Environment | General ,以避免代码打字时格式化:
加快代码模板
为加快扩大代码模板,你可以关掉重新格式化,并缩短合格的参考,您使用的选项模板:
有关编辑代码模板的详细信息,请参阅此帮助条目。
禁止单元测试
如果你不使用ReSharper的单元测试运行,可以通过关闭它节省处理时间。去ReSharper|Options|Tools|UnitTesting,并明确了相应的复选框:
关闭导航栏
如果您使用的文件结构 的窗口,那么你可能不使用导航栏上的编辑器的顶部。如果是这样,你可以通过取消选中相应的复选框以禁用工具|选项|文本编辑器| C#。
如果没有帮助
如果你已经试过了上述的一切,表现仍下跌,你可以暂时禁用ReSharper的,并检查是否有放缓的原因。禁用/启用ReSharper的,到工具|扩展和更新| ReSharper ,点击禁用/启用。
如果禁用ReSharper的有助于提高性能,但你还是要偶尔使用它的代码清理,格式化或分析,你可能想有一个快速切换ReSharper的开启和关闭的快捷方式。这里是如何做到这一点:
转到工具|选项|环境|键盘并找到ReSharper_ToggleSuspended命令,然后按一些快捷键,然后单击分配
已知的性能问题
以下是已知的性能问题及其相应的解决方案的列表。
ReSharper的升级后的性能下降
如果您最近更新的ReSharper的观察与被打开了与以前版本的解决方案,性能下降,你可以尝试通过清除ReSharper的缓存和删除解决方案,以加快事情了名为.suo文件。
要清除高速缓存,去ReSharper|Options|Environment|General,点击ClearCaches:
性能注意事项: 储存在系统临时文件夹缓存可提供额外的好处,比如在项目的内容是通过Dropbox的或类似手段同步案件的能力。此外,性能可以的,如果你的系统临时文件夹映射到一个更快的存储介质,如高性能的固态硬盘或RAM盘得到改善。
已知的兼容性问题
其他Visual Studio扩展
主要的兼容性问题已经观察到了以下产品:
-
DevExpress CodeRush/Refactor Pro (incompatible)
-
Telerik JustCode (incompatible)
-
Whole Tomato Visual Assist
-
Productivity Power Tools
性能下降已经观察到了以下产品
-
Some versions of the StyleCop ReSharper plug-in
-
PowerCommands for Visual Studio
也有报道在网络精华促进低性能的同时,编辑.cshtml文件。如果你受到这个问题,可以考虑将工具|选项|Web Essentials设置Auto-format HTML on Enter为false。
运行Parallels Desktop的Mac
如果你正在运行在Mac上使用的Parallels Desktop的Windows虚拟机的Visual Studio,ReSharper的智能感知列表可能会呈现很慢。
如果这种情况发生在你的设置中,考虑从相干模式切换到全屏模式。用于在两个模式之间进行切换的准则,请参阅Parallels的知识库条目。
改进Visual Studio的性能
开始调整的Visual Studio设置之前,请检查最新的Service Pack和修补程序的安装。
下面是相关链接:http://connect.microsoft.com/VisualStudio/Downloads
加快滚动编辑
用编辑器滚动的问题就出现了,由于硬件加速渲染的编辑器。如果您遇到这个问题,尝试下关闭下列选项工具|选项|环境|通用:
-
基于客户端性能自动调整视觉体验
-
使用硬件图形加速(如果可用)
节省时间启动
关闭起始页和新闻频道可能会节省一些时间启动。要做到这一点,到工具|选项|环境并选择开机时显示空环境。
清除Web缓存
如果您使用的Web项目,Web缓存可能会放缓的Visual Studio。清理,删除下的一切%LOCALAPPDATA% MICROSOFT WebSiteCache。
禁用未使用的扩展
转到工具|扩展和更新,通过该列表,并检查是否真的需要它们。您可以卸载或禁用未使用的。
卸载未使用的项目
如果你不工作的一些项目,你可以从Visual Studio卸载他们,并在需要时重新加载他们。对项目或解决方案资源管理器解决方案文件夹,右键单击并选择卸载项目,或在解决方案文件夹卸载项目-这将加快Visual Studio和ReSharper双方。
禁用XAML可视化编辑器
在大型项目中,编辑XAML文件中可以感受到,即使在良好的硬件慢。如果你不使用可视化XAML编辑器,你可以部分通过禁用它解决问题。
要做到这一点,在Solution Explorer中的XAML文件单击鼠标右键,然后选择打开方式。在出现的对话框中,选择源代码(文本)编辑器,然后单击设为默认值。
或者,去工具|选项|文本编辑器| XAML |杂项,然后取消选择总是完全XAML视图中打开的文档。