《Visual Studio.NET Tips and Tricks》第二章的翻译
第二章 探索IDE
Visual Studio.NET是一个高度定制化的IDE。并不想浪费纸张来介绍常用的功能和动作和控件和修改你的项目和解决方案。这章的技巧覆盖以下内容:从解决方案资源管理器到窗体位置,从管理宏和修改菜单项到IDE中很少被人知道但缺是非常有用的技巧。
用缺省的动作打开
双击解决方案资源管理器中的文件将在缺省的编辑器中打开。你能改变与一个特定的文件类型相关的缺省的编辑器。通过右击文件从弹出的菜单上选择打开…(见图34),你能选择精确的代码编辑器和模式来打开文件。它包括HTML/XML,窗体编辑器,源代码编辑器,二进制编辑器等等。在同一个对话框中,能过单击设置为缺省按钮可以选择文件扩展名相对应的缺省的编辑器。
图34 选择缺省的动作来打开文件
打开…对话框允许你定制缺省的视图模式,当选择Web窗体和Windows窗体时它是非常有用的,因为你可能更喜欢代码视图而不是设计器视图(或者相反)。
显示外面的文件
缺省的解决方案资源管理器胑显示包含在特定的解决方案中的文件。如果你试图通过拷贝文件到项目文件夹的方式来加存在的文件到解决方案中,你想看到它们并没有自动出现在解决方案资源管理器中。为了让它们出现,你需要点击解决方案资源管理器的工具条上的显示外部文件按钮式。这个按钮显示所有文件(发灰的文件并不是解决方案的一部分)。
通过右击文件然后从弹出的菜单上选择包含在项目中你现在就能包含文件到你的解决方案中(同样也使它作为源代码库的一部分)。当然,你也能通过直接从Windows资源管理器中拖文件到解决方案中。
除此之外,通过显示所有的外部文件,你也能看到你的ASP.NET页面代码后置的文件。通过双击代码后置文件,你总是在代码视图中打开ASP.NET页面。
设置项目依赖项
在一个有许多项目和定制的生成事件的大的解决方案中,经常需要控制你的项目的生成次序。VS.NET足够智能知道那个项目需要产生生成,通过分析彼此之间的引用。自然地,第一个引用的项目会第一个生成。这个算法是基于你的项目已经设置了项目引用的事实上。
但是,有时你必须指示VS.NET编译一个项目之前必须先编译没有项目引用的另一个项目。为了这样作,右击你需要最后生成的项目从弹出的菜单上选择项目依赖。在那你能设置对别的项目的依赖,通过选中检查框,将强迫在当前的项目生成之前生成选中检查框的项目(见图35)。当前项目的下拉菜单允许你切换到另一个项目的依赖。
图35 手工设置项目依赖
VS.NET会阻止你设置循环引用,也阻止你修改会导致增加项目引用的依赖。在任何时刻,通过点击只读的生成次序TAB页来验证生成次序。
在VS.NET2005中,在解决方案资源管理器上的项目依赖上下文菜单并不存在于Web应用上,代替的方式你必须选择Web站点>项目依赖。
内嵌文件为资源
内嵌文件为资源允许你直接内嵌任何给定的文件到你产生的程序集中。比如说你需要在你的Windows应用程序中显示你的公司标识。你能生成一个常规的Windows程序集,链接一个和程序一起提供的外部的图形文件。另一种方法就是直接内嵌图形到你生成的程序集中。不就不需要随程序带上外部的图形文件,更重要的确是,你阻止了这两个文件的分离。
在内嵌文件为资源之前,必须把它包含到你的解决方案中。接着你在解决方案资源管理器中选择的文件从属性窗口中改变生成动作属性。生成动作告诉编译器针对特定的文件它需要如何编译。如果你选择内嵌资源生成动作,文件的实际字节会被存储在生成的程序集中(不管生成的是EXE还是DDL)。
运行时,你能使用下面的代码提取字节:
Assembly oAssembly=System.Reflection.Assembly.GetExecutingAssembly();
Stream streamofBytes=oAssembly.GetMainfestResourceStream(“filename.typ”);
从提供的内嵌的资源中得到字节流后,你必须把这些字节转换成原始的文件类型(例如,使用Image.FromStream()转换成图形)。你能内嵌任何的文件类型:声音和电影文件,PDF文件,甚至其它的程序集。
改变IDE的字体大小便于演示
当你演示VS.NET或你的代码时,你经常需要增加文本编辑器的字体的大小,以便每个听众都能看到你正在操作的内容。大多数开发者可能已经知道你能通过选择工具>选项>环境>字体和颜色>大小非常容易地增加字体的大小。但是在输出窗口,解决方案资源管理器,类视图,宏资源管理器,文件TAB页上的标题依然没有变化而难以阅读。
同样你能控制这些元素上的文本的大小(见图36)。在同一个设置窗口,第一个下拉列显示可以设置的元素。改变到阅读对话框和工具窗口。同样通过设置字体和大小,你能控制IDE窗体的主要元素的文本的格式。当你重启IDE后这些改变才起作用。如果你想增加输出窗口的字体,改变显示设置到文本输出工具窗口。
图36 改变IDE窗口的字体尺寸
如果你想重置这些设置到缺省的安装值,按使用缺省按钮。这个按钮只将在显示设置下拉列表中当前选择的项恢复到缺省值。所以你必须对每一个设置重复这个步骤。
拖文件得到完整的路径
你是否知道你能直接从解决方案资源管理器中拖文件到你的代码中?如果你拖它到源代码文件,它简单地插入你选择的文件的完整路径到你的代码中。在HTML编辑器中,VS.NET是足够智能的。如果你拖另一个ASP.NET文件到HTML编辑器,VS.NET会插入路径,并在它周围把加上锚标签,本质上就是建立一个HTML链接。如果你拖一个图片图形,VS.NET插入一个路径,并加上<image>标签。
不幸的是,在VS.NET2002和2003中,所创建的HTML标签是绝对路径,所以极有可能你不得不当发布你的WEB应用之前从URL中移除”http://localhost”或”file://”前缀。VS.NET2005只产生相对的URLs。
四处移动窗口
在VS.NET中每个窗口都是可移动的,可重置大小的,可停靠的:解决方案资源管理器,宏资源管理器,属性,任务和输出窗口;甚至你的工具条,服务器资源管理器和查找/替换窗口。在VS.NET中通过拖标题条移动窗口到预期的位置。当你拖一个窗口接近一个可停靠的区域时(如TAB页或另一个窗口的框架),一个灰的轮廓就会出现,允许你在拖放窗口之前预览结果。通过双击标题条来停靠和取消停靠。你也能在你的TAB窗口上移动TAB页的次序。这包括你的编辑器上部的文件TAB页。
控制窗口位置的能力给了VS.NET巨大的灵活性,但也比较烦人,因为预览框架是易于混淆的以至于不能有一个直接的界面。经常开发者多次才能定位一个简单的窗口到预期的位置。VS.NET2005版本相当比较直觉,它显示一个“快照”指示当你拖窗口到一个区域时窗口将停靠的位置。
如果你发现窗口的位置太乱了的话,通过选择工具>选项>环境>常规>重置窗体布局来重置所有窗体的位置到它们的安装的缺省位置。在VS.NET2005中,你也能通过窗口>重置窗体在布局来重置窗口。
一个到处移动窗口的灵活的方式就是能够创建切分屏幕。简单地拖任何打开的文件的TAB页,移到你的编辑器的最右边(解决方案停靠的最左边)。将会停靠你选择的文件到右边,并切分编辑器成两个垂直的屏幕,每个都有它们自己的文件TAB页(见图37)。在你以垂直的切分模式编辑你的文件时,可以通过点击最右上边的小X来关闭窗口,或能拖文件TAB页返回到其它文件的左边。
图37 移动窗口来创建垂直的切分屏幕
这个技巧同样能用于创建水平的切分屏幕。只需要简单的拖文件TAB页到你的编辑器的最底部。
在同一个文件上切分屏幕
前面描述的四处移动窗口的技巧显示了如何创建切分屏幕以便你能看到两个文件。你是否想创建一个切分屏幕看到同一个文件的两个位置呢?选择窗口>切分就能产生水平的切分,也有一种更快的方式。
主编辑器的垂直滚动条的右上边有一个非常小的,短的,长方形的切分器(见图38)。如果你把鼠标移动它的上面,你会看到鼠标图标变成了切分器图标。拖切分器向下到屏幕的中间将创建切分屏幕(见图39)。
图38 拖水平切分器向下创建切分屏幕
图39 在同一个文件上切分屏幕
一旦你这样作以后,简单地移切分器返回到编辑窗口的上边恢复原来的状态。
定制VS.NET菜单和工具条
你能定制VS.NET菜单通过增加和删除命令还有重新排序命令。选择工具>定制来定制菜单,当定制对话框打开时,导航到VS.NET菜单。现在菜单并不响应鼠标左键Click事件,相反,当你右击菜单项时显示上下文菜单。在那你能重命名,编辑和删除菜单项;也可能四处拖动菜单项,甚至创建你自己的层叠菜单组。
通过右击菜单项从弹出菜单上选择改变按钮图标你也能管理每个菜单项的图标。如果你不满足选择项的图标,你能从另的菜单项上拷贝图标到你新创建的菜单项上。在有好的图标的菜单项上右击,从弹出菜单上选择的拷贝按钮图标,接着用同样的机制粘贴按钮图标到你想修改的菜单项上。要增加的另外外的命令作为菜单,直接从命令TAB页上拖命令到VS.NET的菜单上。
除了能直接修改VS.NET菜单项外,当定制对话框打开时,VS.NET2005增加了一个完全新的GUI来修改菜单。当你选择工具>定制>重排命令。当那样你能移动,增加和删除菜单项同样还有工具条按钮(见图40)。
图40 通过重排命令定制菜单
加外部的程序到VS.NET菜单
如果你在开发.NET代码时经常使用第三方的程序的话,你会欣赏这个事实:你能在VS.NET菜单上创建这些程序的快捷键。例如,如果你经常使用企业管理器,查询分析器,ILDASM,.NET反射器或其它程序,考虑选择工具>外部工具书来增加外部的程序到菜单上(见图41)。增加的新程序将出现在上工具菜单上,也可以指定它们的参数和工作目录。
你甚至能设置环境变量,如$(ItemFileName)代表当前打开的文件或$(ProjectDir)代表当前项目的目录。如果你不知道都有什么环境变量的话,按这些域右边的扩展按钮。
图41 加外部工具到VS.NET菜单
现在你喜欢的程序就会出现在工具菜单上,便于你快速和方便的访问。为了定制你的新的菜单项的图标,简单地使用前面描述过的技巧。
通过选择工具>选项>环境>键盘和寻找许多的Tools.ExternalCommands命令来指定这些外部工具的快捷键。从中选择一个指定为外部工具的快捷键。
从Windows资源管理器中拖文件到VS.NET
Visual Studio.NET完全支持文件的拖放操作。你能直接从Windows资源管理器中拖文件到VS.NET中。如果你放文件到解决方案资源管理器中的某个项目下,首先它会被拷贝到和项目相同的文件夹中接着包含到项目中。如果你拖到代码编辑器,VS.NET要么开始缺省的外部的查看器(例如,对于PDF文件的Adobe Acrobat),要么在VS.NET中显示文件的内容,如果VS.NET能够理解文件的类型的话。
如果你没有足够的屏幕空间从Windows资源管理器中拖文件到VS.NET中,最好的方法就是拖文件到屏幕底部的Windows的任务栏上,在任务栏上暂停几秒等待VS.NET。等VS.NET得到焦点后,就能拖文件到恰当的位置(这是Windows的技巧,不是VS.NET的技巧)。
访问命令窗口
命令窗口是VS.NET中一个小的但非常强大的窗口,它允许你触发你能在VS.NET中执行的任何动作。它有完整的对象模型和解你的文件,文件夹,项目,宏,别的IDE对象进行交互。通过选择视图>其它窗口>命令窗口或按Ctrl-Alt-A来查看命令。除了在标题条上的“命令窗口”外,你也认识它因为它显示一个命令提示符“>”(见图42)。
图42 通过命令窗口打开文件
在这你能触发VS.NET指定的命令,例如,“CloseAll”,关闭当前所有打开的窗口。“Build.BuildSolution”,如你可能期望的生成当前的解决方案。如果你不知道这些命令来源,到工具>选项>环境>键盘。这你能看到所有在VS.NET中可利用的命令。
在大多数情况下,你能触发这些命令通过以下列格式敲入它们:
Category.CommandName
命令被分组成类别,允许你直觉地找到特定动作的命令的名字。
这有有助于智能感知在命令窗口中工作。你能重置智能感知下拉菜单到你期望的大小。此外,如果你敲入open命令,你会看到智能感知检查你的文件系统来显示你的硬盘上可能的文件和文件夹。你并不需要跳转到Windows资源管理器来定位文件。
给你喜欢的命令起别名
如果你发现你自己多次在命令窗口执行一个命令,考虑为这个命令创建一个别名。别名的语法如下:
Alias [NewName] [OldName] [Arguments]
例如,打开你的设计文档的别名,敲下面的:
Alias DesignDoc open “c:\Your Folder\Your Design Document.doc”
关于别名最好的事情就是它们是永久的。因此,即使你重启了VS.NET,你还能使用它们,简单地敲alias查看所有的别名。删除一个别名的语法如下:
Alias –d DesignDoc
在即时窗口和命令窗口之间切换
命令窗口另一个好的特性就是能够快速切换到即时窗口和快速地从即时窗口返回的能力。即时窗口就是当你调试你的程序时你敲入变量名返回变 量的值(看第三章的“使用即时窗口显示变量和执行方法”)。
从命令窗口切换到即时窗口要敲immed。这个命令切换命令窗口到“即时模式”。通过缺少“>”命令提示你能识别出即时窗口(除了在标题条上的名字外)。
在你的即时状态过程中,你能随时运行一个单个的命令通过加一个命令提示前缘“>”。如果你想永远切换回命令窗口,你必须执行cmd命令,当然要加命令提示符以便于VS.NET认为你并不是查询一个不存在的叫“cmd”的变量。
在搜索的下拉列表中使用命令窗口
如果前面的技巧并不能使你方便地使用命令窗口,因为你首先得通过菜单或前面提到的快捷键来打开命令窗口,你将喜欢VS.NET有另一个更快的方法来执行命令。
按Ctrl-/切换代码编辑器上面的查找下拉列表成为命令提示符“>”已经存在的“小的命令窗口”(见图43)。这个小的命令窗口包含了同样的完整的特性,包括智能感知和所有的你以前创建的别名。
图43 使用查找下拉列表作为小的命令窗口
使用内置的Web浏览器
如果ASP.NET开发者通过设置缺省的浏览器为内置的浏览器来调试一个Web应用的话,他们都知道VS.NET内置了一个Web浏览器 。通过右击一个.aspx文件从弹出的菜单上选择浏览…来设置缺省的浏览器。指定是否使用一个新的IE的实例还是使用内置的Web浏览器。内置的浏览器出现在VS.NET中作为一个文件TAB页。
你也能在非调试状态下使用Web浏览器。按Ctrl-Alt-R打开内置的Web浏览器,顶部和IE一样的工具条可以用来导航到任意的URL,和你的收藏夹交互,恢复和保存URLs,甚至访问你的浏览器的历史(见图44)。按Ctrl-Alt-F可以调出收藏夹。
图44 在VS.NET内部浏览Web页
使用全屏模式
如同微软其它的产品一样,全屏模式允许你隐藏除了主编辑器之外的任何事物,以后便整个屏幕显示主视图。通过视图>全屏或按Ctrl-Shift-Enter进行了全屏模式。主菜单仍然处于顶部还一个用于关闭全屏模式的浮动的按钮。开发者能够隐藏关闭全屏模式按钮,在这种情况下你必须记住能够返回到正常模式的确键盘快捷键或选择视图>全屏。
全屏模式可应用于任何视图包括HTML,设计器和XML视图。
拷贝一个类的强名称
类视图(选择视图>类视图按Ctrl-Shift-C)一个展现你的解决方案中所有的类和命名空间的层次视图。你能向下展开类和它的成员并能通过双击导航到成员定义处。另一个有用的特性就是允许你抽取类或成员的完整的命名空间。选择类或类成员接着按Ctrl-C。会拷贝选择项的完整的命名空间到剪切板。当你有一个复杂的或多层的命名空间结构时是非常有用的。
如果你想粘贴命名空间到VS.NET的代码编辑器,并不需要选拷贝到剪切板。简单地从类视图直接拖类或类的成员到你的代码中就会看到VS.NET已经粘贴了完整的命名空间和成员名。
记录和重新播放一个临时的宏
你是否遇到这种形势:在写代码时你重复敲一系列的按键?有可能你在格式化许多行代码时时你为每一行按相同次序的按键?如果是这样的话,考虑使用临时宏。把宏认为是一段脚本,允许你和VS.NET环境编程交互来自动化任务。幸运的是,宏是用VB.NET写的所以你不需要学习另一种语言来使用它。事实上,你甚至不需要学习使用写一个宏。只记录一个宏,让VS.NET为你写代码。
选择工具>记录临时宏或按Ctrl-Shift-R。出现浮动的记录器的工具条(见图45),会记录每一下按键,菜单事件,和你执行的动作,并用VB.NET把它们写入到一个临时的宏。执行你需要完成一个重复的任务的步骤。当完成后,按浮动的工具条上的确停止记录按钮(它看起来象VCR上的录音按钮)来停止记录(或按Ctrl-Shift-R)。
图45 暂停,停止,和忽略当前的宏记录
你能随时重放临时的宏通过选择工具>宏>运行临时宏或按Ctrl-Shift-P快捷键。
保存,编辑和调试宏
让人非常惊奇的是,前面描述的创建的临时的宏在VS.NET重启后依然存在,因为它实际上保存在你的宏资源管理器中作为一个宏。但是下一次你记录一个新的临时宏时就会覆盖掉。
如果你打开宏资源管理器窗口(选择视图>其它窗口>宏资源管理器或按Alt-F8),你就会看到你的临时宏被保存在上MyMacros包下的RecordingModule项下。双击任何列出的宏就会执行。VS.NET自带了许许多多有用的宏可以在例子宏包下找到。
通过右击任何宏从弹出的菜单上选择编辑,你能验证VB.NET代码。不幸的 是,你不能用C#或其它别的.NET语言来书写宏。
但是 ,你能调试宏。设置断点并触发宏。宏编辑器会在上设置的断点处中止,给你丰富的调试环境如同你调试一个常规的.NET应用 的,包括移动光标和察看变量的值。事实上,另一个VS.NET的实例会被触发来调试你的宏。
缺省的保存的宏的物理文件的位置是我的文档\Visual Studio Projects\VSMacrosXX目录,这里XX是你的VS.NET的版本号。
为宏指定快捷键和菜单项
在你开发的你的宏之后,一个触发宏的方式就是双击宏资源管理器中的宏。执行宏一个更快的方法就是给宏提供一个快捷键或菜单项。为了创建一个快捷键,选择工具>选项>环境>键盘。在这你能找到所有可能的VS.NET命令的列表(见图46)。在它们中间你会看到你的宏列在Macros.MyMacros.YourModule.YourMacroMethod下。
一旦你选择了你的宏,你就能指定一个快捷键通过敲你预期的快捷键在按快捷键的文本输入框中通过按指定来验证。左边的下拉列表允许你为快捷键指定范围(也就是,指定快捷键在那个编辑器中可以使用)。
图46 为宏指定快捷键
为了给你的宏创建一个按钮,选择工具>自定义。(你也能得到自定义对话框,通过双击想创建按钮处的按钮条上部的空的地方)。在命令TAB页上,选择宏分类。现在简单的从命令列表中拖你的宏到任何工具条上来创建一个按钮(见图47)或任何菜单处来创建一个菜单项。如果别的按钮或菜单命令,你能右击它来创建它的标签或图标(包括从别的按钮或菜单项上拷贝图标)。
图47 移动宏到工具条上
改变几个控件的属性
当你设计你的Windows窗体时。你使用属性窗口来修改你一个控件的行为和性能。但是当你同时选择多个控件时,属性窗口是会自适应这种情况。通过选择一系列的控件(要么通过在选择控件时按下Ctrl或Shift键 或用你的鼠标进行区域选择),属性窗口会自动显示所有选择的控件的通过属性。对所有选择的控件,你在属性窗口所作的任何变化都会影响到所有选择的控件。
例如,在你从工具条上拖了一系列的文本输入框到你窗体上想除去缺省的“TextBox
锁定控件
当你在你的Windows窗体上布局你的Windows控件时,你能非常容易地到处移动你的控件,通过简单地拖动和双击来创建事件处理体。
但是这个简单性也有它的缺陷。你很容易意外地移动控件。如果你已经完成设计你的Windows窗体是这不是一个最好的选择。
为了阻止这种情况发生,你能锁住你的窗体。在设计器视图,在你的窗体上右击从弹出的菜单上选择锁住控件(见图48)。虽然你仍然能够增加事件处理体和修改一个控件的性能,但是你不能再移动或重置控件的大小。一个小的,黑的轮廓会出现在每个选择的控件的周围指示它被锁住而不能四处移动。如果你想返回到设计器视图,右击你的窗体从弹出的菜单上再次选择锁住控件。
图48 在设计器视图上锁住控件
在属性窗口中拴牢描述
属性窗口不只是显示选择的控件的所有属性。底部的描述面板描述了活动的属性。当你选择不同的属性时,描述面板能指示你选择的属性能作什么。如果你想话可以重置面板的大小。起初,它是非常有用的,但当你成为一个非常有经验的.NET开发人员时,它就只是浪费宝贵的屏幕空间了。通过右击属性的名字从弹出的菜单上选择描述可以关掉它。随后用同样的方式你能打开它。
在属性窗口中改变下拉列表的值
当一个属性只能接受有限数目字的值中的一个时,值域就变成一个下拉列,你可以从中选择。例如,Windows窗体的FormBorderStyle属性只能接受None,FixedSingle,Fixed3D,FixedDdialog,Sizable,FixedToolWindow和SizableToolWindow。为了选择一个恰当的值,你必须打开下拉列表选择你想要的风格。
在属性窗口如果有一个下拉列表时,你能通过简单的双击属性或它的相应的下拉列来在列中快速循环。没有扩展下拉列,双击列就可设置为列中的下一个值(如果现在的值是最后的一个就到第一个值处)。
我发现这个技巧是相当有用的,特别是切换Boolean值,因为双击它会快速从True改变为False,反之亦然。
通过IDE增加和移去事件处理体
在IDE中增加缺省的处理体是相当容易的。在大多数情况下,所有你要作的就是双击控件。它会为缺省的事件处理体创建必要的代码。非缺省的事件是什么?你如何加它们?更 正重要的,你如何移去事件处理体?在C#中,移除一个事件处理体不但要求移去方法本身,还要移去钩事件处理体到事件的代码,它经常出现在InitializeComponents()方法中。
正确的但是相对隐蔽的在C#中增加和移去事件处理体的方法就是使用属性窗口。选择控件接着点击属性窗口的事件按钮。属性窗口显示所有选择的控件暴露的事件,还有已经钩住它们的事件处理体。
大多数开发者没有意识到的是事件处理体域是可点击的(见图49)。如果你双击一个空的域,会为你创建一个事件处理体。它允许你选择你想订阅那个事件。如果你已经写了一个事件处理体,你只是想钩它到事件上,你也能使用选择域旁边的下拉按钮,它会自动列出所有匹配的事件处理体。
图49 通过IDE增加或移去事件处理体
删除事件处理体就是删除事件域中的值一样简单。它也会移去你在InitializeCompoents()方法订阅的事件处理体。
至于VB.NET,大多数开发者都知道如何增加一个非缺省的事件。在代码视图中,你能使用左上边的下拉列来选择一个控件,选择右上边的下拉列要么跳转到一个事件处理体,要么就创建一个如果没有的话。因为事件订阅是被VB.NET中的关键字“Handles”来标识的 确,删除一个事件处理体也就是删除方法本身。
但是,如果你想通过属性窗口来访问VB.NET中的事件列,你必须更新到VS.NET2005,因为只有它VB.NET才开始有同样的特性。
通过下拉列表选择控件
当Windows窗体上有许多控件时,找到一个控件就会变得相当麻烦,更不用说选择控件了。当许多面板层叠在一起或Windows窗体太拥挤时,分离出一个你想修改的特定的控件这会成为一个问题。
在这种情况下,可以通过属性窗口上边的下拉列表来选择控件。这个下拉列表只会出现在设计器视图。它包含所有存在Windows窗体上的控件。为了选择某个确定的控件,你只需要知道它的ID和数据类型。
通过设计器为Windows服务增加一个安装器
当你写一个Windows服务时,你经常需要创建一个完成你的服务的安装的安装器的类。传统上,通过选择项目>增加新项从弹出的对话框上增加这些安装器,但是,因为大多数Windows服务都需要一个安装器的类,VS.NET增加了一个方便的的快捷键。
如果你在设计器视图查看你的Windows服务,你只看到一个空的面板,上面有几个链接来打开服务器资源管理器,工具条或切换到代码视图。但是,如果你右击设计器面板,弹出的菜单上显示增加安装器的项(见图50)。选择它会为你的Windows服务增加安装器的类。
图50 从设计器视图增加安装器的类