[VS2005 Tip]定制Code Expansion。

本文介绍如何在Visual Studio 2005中自定义CodeSnippet以实现快速代码扩展,包括创建用于生成属性及NUnit TestFixture的XML文件步骤。
上篇文章里,我向大家介绍了在VS2005的IDE中,利用code expansion功能,自动生成Property的方法,事实上,在VS2005里已经预制了相当多的用来代码扩展(Code Expansion)的代码片断(Code Snippet),"prop"就是一个例子。在Tools菜单下,有一个叫作Code Snippets Manager的工具,在里面可以看到预定义的所有的Code Snippet。

那么我们是不是可以自定义一个Code Snippet用来作Code Expansion呢?经过试验,答案是肯定的!下面我们来看一下怎么完成这个工作。

首先,每个Code Snippet都对应了一个XML文件。在Code Snippets Manager中,我们可以看到这些XML的存放地点。如图:

codesnippet01.GIF

打开这个XML文件,可以看到如下的内容:

None.gif <? xml version="1.0" encoding="utf-8"  ?>
None.gif
< CodeSnippet  Format ="1.0.0" >
None.gif    
< Header >
None.gif        
< Title > property </ Title >
None.gif        
< Shortcut > prop </ Shortcut >
None.gif        
< Description > Generate property and backing field </ Description >
None.gif        
< SnippetTypes >
None.gif            
< SnippetType > Expansion </ SnippetType >
None.gif        
</ SnippetTypes >
None.gif    
</ Header >
None.gif    
< Snippet >
None.gif        
< Declarations >
None.gif            
< Literal  default ="true" >
None.gif                
< ID > type </ ID >
None.gif                
< ToolTip > Property type </ ToolTip >
None.gif                
< Default > int </ Default >
None.gif            
</ Literal >
None.gif            
< Literal >
None.gif                
< ID > property </ ID >
None.gif                
< ToolTip > Property name </ ToolTip >
None.gif                
< Default > MyProperty </ Default >
None.gif            
</ Literal >
None.gif            
< Literal >
None.gif                
< ID > field </ ID >
None.gif                
< ToolTip > The variable backing this property </ ToolTip >
None.gif                
< Default > myVar </ Default >
None.gif            
</ Literal >
None.gif        
</ Declarations >
None.gif        
< Code  Language ="csharp"  Format ="CData" > <![CDATA[ private $type$ $field$;
None.gif
None.gif    public $type$ $property$
None.gif    {
None.gif        get { return $field$;}
None.gif        set { $field$ = value;}
None.gif    }
None.gif    $end$
]]>
None.gif    
</ Code >
None.gif    
</ Snippet >
None.gif
</ CodeSnippet >


我来解释一下其中主要的标签的作用:

None.gif < Shortcut > prop </ Shortcut >  

定义了用来扩展的缩写是prop

None.gif < SnippetTypes >
None.gif       
< SnippetType > Expansion </ SnippetType >
None.gif
</ SnippetTypes >
None.gif

定义了这个Snippet是用来作Code Expansion的。SnippetType的可能的取值还有

None.gif < SnippetType > SurroundsWith </ SnippetType >  

你猜得没错这个就是用来设置Intellisense中的Surround With的功能的。一个Snippet可以同时拥有这两个类型。

<Declarations>标签中定义了扩展之后,需要用户填写的部分。每个<Literal>标签定义一个变量。<Default>定义了默认的取值。

最重要的就是<Code>中的内容了,这个就是扩展后的样子了。

下面我写了一个用来自动扩展出一个NUnit的TestFixture的Code Snippet。

None.gif <? xml version="1.0" encoding="utf-8"  ?>
None.gif
< CodeSnippet  Format ="1.0.0" >
None.gif    
< Header >
None.gif        
< Title > TestFixture </ Title >
None.gif        
< Shortcut > tstFix </ Shortcut >
None.gif        
< Description > Expansion snippet for Test Fixture class </ Description >
None.gif        
< SnippetTypes >
None.gif            
< SnippetType > Expansion </ SnippetType >
None.gif        
</ SnippetTypes >
None.gif    
</ Header >
None.gif    
< Snippet >
None.gif        
< Declarations >
None.gif            
< Literal  default ="true" >
None.gif                
< ID > name </ ID >
None.gif                
< ToolTip > Class name </ ToolTip >
None.gif                
< Default > MyClass </ Default >
None.gif            
</ Literal >
None.gif        
</ Declarations >
None.gif        
< Code  Language ="csharp"  Format ="CData" > <![CDATA[
None.gif    [TestFixture]
None.gif    class $name$
None.gif    {
None.gif        $end$
None.gif    }
None.gif    
]]>
None.gif        
</ Code >
None.gif    
</ Snippet >
None.gif
</ CodeSnippet >

注意在这里,我在<Code>中使用了$end$这个预设的变量,这个变量表明了在输入完所有的Literal之后,光标将停留的位置。

写完了之后,将这个XML文件保存到一个新建的目录。然后在Code Snippets Manager中,加入这个目录,然后就可以在IDE中使用这个Code Snippet了。

现在,按下tstFix之后按Tab键,就会自动生成一个带有[TestFixture]属性的类了。

大家还可以按照这个方法去试一下Surround With的功能。


转载于:https://www.cnblogs.com/Hush/archive/2004/10/27/57492.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值