在VS 2010中查询和导航代码

【原文地址】Searching and Navigating Code in VS 2010 (VS 2010 and .NET 4.0 Series)
【原文发表日期】 Wednesday, October 21, 2009 12:50 AM

这是我针对即将发布的VS 2010 和 .NET 4所撰写的 贴子系列的第九篇。今天的博客讨论已经内置于VS 2010中的一些新的代码查询和导航特性。

代码的查询和导航

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

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

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

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

image 

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

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

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

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

image

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

image

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

image

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

image

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

image

很棒的模糊查询功能

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

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

image

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

image

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

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

image

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

查看调用的层次结构

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

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

image

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

image

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

image

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

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

image

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

引用的高亮显示

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

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

image

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

image

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

结束语

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

希望本文对你有所帮助,

Scott

除了写博客外,最近我一直在使用Twitter发短贴和共享链接。你可以在Twitter上通过www.twitter.com/scottgu(@scottgu是我的twitter名)跟随我。

【译注】把上面的Navigate翻译成“导航”觉得有点那个,其实这里的意思跟“定向”,“定位”,“转向”相近。

你可能感兴趣的:(在VS 2010中查询和导航代码)