本系列文章导航

​VS 2010 和 .NET 4.0 系列之《ASP.NET 4 中的SEO改进 》篇​

​VS 2010 和 .NET 4.0 系列之《干净的Web.Config文件 》篇​

​VS 2010 和 .NET 4.0 系列之《起始项目模板》篇​

​VS 2010 和 .NET 4.0 系列之《多定向支持》篇​

​VS 2010 和 .NET 4.0 系列之《多显示器支持》篇​

​VS 2010 和 .NET 4.0 系列之《代码优化的Web开发Profile》篇​

​VS 2010 和 .NET 4.0 系列之《ASP.NET, HTML, JavaScript 代码片段支持》篇​

​VS 2010 和 .NET 4.0 系列之《自动启动ASP.NET应用》篇​

​VS 2010 和 .NET 4.0 系列之《在ASP.NET 4 Web Forms中实现URL导向》篇​

​VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇​

​VS 2010 和 .NET 4.0 系列之《VS 2010代码智能提示的改进》篇​

​VS 2010 和 .NET 4.0 系列之《添加引用对话框的改进》篇​

​VS 2010 和 .NET 4.0 系列之《内置图表控件》篇​

  代码的查询和导航

  开发人员需要能够对正开发的代码库(code-base)进行轻松的导航,查询和理解。在我们做的可用性研究中,我们一般会发现较之于实际编写新的代码,开发人员会花更多的时间在阅读,检查和查询现有的代码上。

  VS 2010代码编辑器添加了一些非常棒的新特性,这些特性允许你更加高效地查询和导航代码库,允许你更轻松地理解代码在方案中是如何被使用的。

  对ASP.NET MVC源码进行查询和导航

  为这个博客贴子起见,我将使用ASP.NET MVC框架代码库(有好几千行代码)来帮助示范一些新的VS 2010查询和导航特性。如果你安装了VS 2010 Beta 2的话,你可以跟着我的示范,从这里下载并打开ASP.NET MVC框架源码。

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_代码库

  你应该会发现下面的特性对这个项目而言,速度非常快,尽管该项目有好几千行代码。我在下面示范的所有的特性目前都内置于VS 2010了(对所有的项目类型,以及对VB 和 C#都工作)。

  VS 2010 之“Navigate To (导航到)” 支持

  能够快速地找到代码,并导航到这些代码,无论对大的还是小的方案都很重要。

  Visual Studio 2010现在支持一个新的(Ctrl+逗号)的键盘快捷(即,控制键和逗号键同时按下)。当你按下(Ctrl+逗号)组合键时,一个新的VS 2010 “Navigate To(导航到)”对话框会出现,允许你快速地查询你的方案中的类型,文件,变量和成员,然后打开并且定位到这些东西上面:

  这个“Navigate To”对话框提供了一个快速的递增查询界面, 你一开始键入查询文字,结果就立刻显示出来。例如,键入“cont”(不用按回车),你就会看到随着你开始键入,176个结果立刻显示在结果列表中:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_.net_02

  再多键入几个字符,你就会看到列表自动过滤为那些匹配“controller”的结果:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_代码库_03

  你可以使用卷动条卷动结果,或者也可以按tab键,然后使用光标箭头键(如果你不想把手移离键盘的话)。你会发现“Navigate To” 窗口列出了匹配你的查询文字的所有类型的结果, 包括类型名称,方法、属性名称,字段声明,以及文件名称:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_.net_04

  选择列表中的任意一个结果,会将相关的源码文件在VS 2010打开(如果还没有打开的话),立刻将你带到相关的源码位置(并且将其中的相关名称高亮显示):

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_.net_05

  很棒的模糊查询功能

  “Navigate To”查询框还支持一些很棒的“模糊查询”功能,允许你做一些智慧的过滤和查询操作,而不必知道你正在查询的东西的确切名称。在对话框的递增/即查即显的查询界面中这些操作都工作良好,允许你改进你的查询,随着键入操作,就得到实时的结果。

  来试一下,让我们首先查询“cache”这个词。注意一下,查询结果中不光包括那些起先的字母为“cache”的项,而且也显示了那些包含“cache”这个词的结果:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_asp.net_06

  我们可以在查询文本框中加多个词,进一步过滤查询结果。例如,在下面,我对列表做了过滤,只包括那些名称中同时含有“cache”  “action” 的结果:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_asp.net_07

  .NET框架中的类型和成员用了一个命名设计指引模式叫“Pascal Casing”,即,类型或成员名称中每个词的第一个字母都是大写的。“Navigate To”对话框也允许你使用这个“Pascal Casing”约定来快速地过滤类型。只键入类型/成员名称的大写首字母,它就会立刻过滤列出匹配大写pascal命名约定的结果。

  例如,键入“AMS” 会过滤出下面的结果(只有那些名称中的词先以A起头,然后是以M起头,然后是以S起头的类型和成员):

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_代码库_08

  “Navigate To” 对话框允许你以最少的键击次数就能快速地过滤和定位代码,免去你不得不使用鼠标,打开解决方案管理器,然后直接点击文件的劳苦。

  查看调用的层次结构

  拥有快速查询和导航的能力固然是好,但要是能够快速地发现代码是怎么被使用的,那就更好了。VS 2010引进了一个新的“View Call Hierarchy (查看调用的层次结构)”的特性,允许你快速地发现你的代码库中的某个特定方法或属性是在何处被调用的,允许你快速地遍历(traverse)整个代码库的调用树形图(而不必运行或调试方案)。

  要用这个特性,只要选择你的代码库中的一个方法或属性名称,然后键入(Ctrl+K,Ctrl+T )快捷键组合,或者右击、然后选择“View Call Hierarchy”上下文菜单命令:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_高亮显示_09

  这会调出一个新的“Call Hierarchy (调用的层次结构)”工具窗口,在默认情形下会在代码编辑器下方显示。在下面,你可以看到“Call Hierarchy”窗口显示了我们方案中的2个方法,它们调用了我们在上面选择了的 ViewPage.RenderView() 方法。

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_代码库_10

  然后,我们还可以向下钻取到第一个“RenderViewAndRestoreContentType”方法,进而看都是谁调用了它:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_asp.net_11

  对虚拟方法/属性,你还可以使用调用层次结构窗口看哪些类继承并覆盖了它们。

  双击“Call Hierarchy”窗口中的任意一个成员会打开相应的源码文件,立刻将你带到对应的源码位置:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_.net_12

  这允许你快速地在代码库中导航,在编写代码时,更好地理解类和方法间的关系。

  引用的高亮显示

  在VS 2010中,当你在代码编辑器中选择或高亮显示一个变量/参数/字段声明时,所有这些东西随后用到的地方都会在编辑器中为你自动地高亮显示,这方便你快速地识别一个变量或参数是在什么地方被使用的以及是如何使用的。

  例如,当我们在下面的编辑器中选择传到ControllerActionInvoker.GetParameterValue()方法中的“controllerContext” 参数时,注意在该方法中用了这个参数的4个地方现在都被自动高亮显示了:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_代码库_13

  如果我选择该方法中的一个局部变量,用到了它的所有地方现在都被自动地高亮显示了:

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇_层次结构_14

  如果多个地方被高亮显示了,你可以使用(Ctrl-Shift-up箭头)键组合和(Ctrl-Shift-Down箭头键组合在它们之间来回循环,快速地将光标移到上一个或下一个高亮显示的字符上。

  结束语

  新的 VS 2010 文本编辑器方便了对项目或方案中的代码的快速查询,导航和探究。这些操作的速度非常之快(即使是在一个大的代码库内),而且随着你对项目进行改动,会保持更新,最终结果是使你的生产力大为提高。

  希望本文对你有所帮助,

  Scott