Visual Studio技巧之打造拥有自己标识的代码模板

来源:百度文库 编辑:神马文学网 时间:2024/05/23 23:17:26

Visual Studio技巧之打造拥有自己标识的代码模板

    可能经过很多博客的介绍,大家都知道代码段的使用,使用代码段可以很方便地生成一些常用的代码格式,确实对我们开发很方便。在团队开发中或者在某些情况下我们经常可能还会希望使用Visual Studio生成的代码自动带有一些信息,比如代码文件的创建时间、代码的说明及对命名空间的引用等等,实际上这个功能经周公证实在Visual Studio2005以上版本中就支持了。

下面以周公的本本的具体情况为例来加以说明,在周公的DELL 1425上系统是安装在C盘,在系统盘下同时安装了Visual Studio 2005和Visual Studio 2008两套Visual Studio,并且安装了正版的SQL Server 2005,因为系统盘经常在Windows XP和Windows 7之间切换并且还想在Windows XP和Windows 7之间共享某些个人配置,所以将我的文档目录设置到了系统最后的一个盘G盘上了,具体路径为G:\My Documents,如果不做特别配置应为C:\Documents and Settings\zhoufoxcn\My Documents,这一点尤其注意。

这里针对Visual Studio 2008来进行说明,首先我们打开C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE这个目录(如果使用Visual Studio 2005则对应的路径为C:\Program Files\Microsoft Visual Studio 8\Common7\IDE),可以看到如下的情况:

从上图中可以看出ItemTemplates和ProjectTemplates文件夹被周公选中了,因为这个文件夹对我们有用。其中ItemTemplates文件中存放着我们向项目添加文件时的模板,ProjectTemplates文件夹顾名思义存放着我们创建项目的模板。这些文件夹中的模板分别会在我们创建文件或者项目时出现。

除了这些模板之外,Visual Studio在新建时还会搜索当前用户的个人模板,在周公的本本上针对Visual Studio 2008的个人模板存放路径为G:\My Documents\Visual Studio 2008\Templates(如果没有经过这种这样的特殊设置,这个路径可能为C:\Documents and Settings\zhoufoxcn\My Documents\Visual Studio 2008\Templates,其中的zhoufoxcn为当前登录系统的用户名),打开这个文件夹,我们看到如下情况:

在没有做任何配置的时候这两个文件夹都是空的,在此时如果我们向项目中添加文件会看到这样的情况,如下图:

从上图可以看出,我的模板是空的。

好了,下面周公将C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE下的ItemTemplates和ProjectTemplates文件夹拷贝到了当前个人配置文件夹G:\My Documents\Visual Studio 2008\Templates下(请注意你的电脑配置与我的电脑配置中路径的对应关系),可能系统会提示是否覆盖,点击确认之后我们再在任何项目中创建新文件会看到下面的情况,如下图所示:

此时我们可以看到我的模板下可以创建的新文件类型和系统的一摸一样,如果此时我们选择创建的话,生成的文件内容也会和系统模板的一样。为了打造属于我们个性的代码,我们需要对我的模板进行改造。

举例来说,假如我们要改变系统默认生成的代码,想在创建代码时自动添加一些信息,比如我们想让默认生成的是public的,那么可以按照下面的步骤做:

首先打开我的模板存放路径,在周公这里这个路径是G:\My Documents\Visual Studio 2008\Templates\ItemTemplates(请注意你的可能与周公的不同),这个文件夹下存放的是包含VB.NET、C++及C#等新建项目的模板,如果我们要改变的是C#文件的,请继续打开C#文件的创建模板,在周公本本上这个路径为G:\My Documents\Visual Studio 2008\Templates\ItemTemplates\CSharp\Code\2052,在这个文件夹下有四个zip文件,名称是Class.zip、CodeFile.zip、Interface.zip和NETCFv2-Class.zip,分别对应的是添加类、代码文件、接口及.NET Compact Framework类的模板,在每个zip压缩包里都有一个.cs文件和一个.vstemplate文件。在这里周公将Class.zip解压出来,这时的class.cs文件代码如下:

 

    using System;
    using System.Collections.Generic;
    $if$ ($targetframeworkversion$ == 3.5)using System.Linq;
    $endif$using System.Text;
    
    namespace $rootnamespace$
    {
        class $safeitemrootname$
        {
        }
        }

 

 

将代码更改如下:

代码    using System;
    using System.Collections.Generic;
    $if$ ($targetframeworkversion$ == 3.5)using System.Linq;
    $endif$using System.Text;
    
    namespace $rootnamespace$
    {
        /// 
        /// 作者:zhoufoxcn
        /// 时间:$time$
        /// 公司:$registeredorganization$
        /// 版权:$year$-2012
        /// CLR版本:$clrversion$
        /// 博客地址:http://blog.csdn.net/zhoufoxcn
        /// $safeitemrootname$说明:本代码版权归周公所有,使用时必须带上周公博客地址
        /// 唯一标识:$guid1$
        /// 

        public class $safeitemrootname$
        {
            $safeitemrootname$()
            {
            }
        }
    }

 

保存class.cs,然后利用压缩软件将class.cs和刚刚从Class.zip中解压出来Class.vstemplate文件压缩为Class.zip文件(注意一定要压缩成zip文件而不是rar或者其它格式文件,WinRAR提供这种功能),然后替换原来的Class.zip文件。

好了,现在我们可以检验我们的成果了。随便打开一个项目,按照“添加”-“新建项”的步骤添加,在弹出的对话框中“我的模板”下选择“类”(因为我们刚刚改的就是我的模板中添加的类的模板),这时Visual Studio 2008按照模板生成的代码如下:

 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace WCFClient
    {
        /// 
        /// 作者:zhoufoxcn
        /// 时间:2010-6-20 9:39:04
        /// 公司:www.netskycn.com
        /// 版权:2010-2012
        /// CLR版本:2.0.50727.3603
        /// 博客地址:http://blog.csdn.net/zhoufoxcn
        /// Class1说明:本代码版权归周公所有,使用时必须带上周公博客地址
        /// 唯一标识:f5d4bfbe-accd-4d77-92b0-1407db616ae1
        /// 

        public class Class1
        {
            Class1()
            {
            }
        }
    }

 

 

从上面的例子可以看出选择我的模板的项就会按照预定好的格式生成代码,如果我们对项目中的代码有特殊格式要求的话,在这里统一定制非常方便,至少周公以后会用这种模板来写公布在博客上的代码,因为周公注意到有很网站喜欢将别人博客上的文章中的链接信息和作者信息去掉,这事实上违反了作者的声明。有时间的话我们可以针对每一个项更改出自己的模板。

上面我们仅仅演示了生成新文件的配置,其实我们还可以更改新生成项目的配置,按照前面的操作我们添加新项目时也有我的模板选项,如下图所示:

不过即使从我的模板中选择创建新项目也和系统中的项目一样,因为没有经过任何特殊配置。我们可以修改G:\My Documents\Visual Studio 2008\Templates\ProjectTemplates\CSharp下的项目模板,它们同样也是一个zip文件,比如我们想要统一程序集信息,可以修改这个zip文件中的assemblyinfo.cs文件的内容,这样就不用每次都手动去修改程序集信息了。

通过上面的步骤之后可以让我们很方便地定制了添加新项或者新项目的模板,这在公司中团队开发中还是相当有用的,也方便对代码文件的格式的统一。

需要说明的是在编辑模板时会看到一个形如$time$、$rootnamespace$之类的东西,这些算是生成模板时用到的变量吧,在编辑模板时可以使用哪些变量微软没有官方的资料,不过周公留意了一下,大概有如下:

Itemname

safeitemname

sateitemrootname

projectname

safeprojectname

rootnamespace

guid[1-10]

time

year

username

userdomain

machinename

clrversion

targetframeworkversion

registeredorganization

wizarddata

可能有些人对上面的变量名不是太理解,其实是有规律的,都是一到几个单词的全称,只不过没有遵循我们平常所说的Camel和Pascal命名法则罢了(大家可以看的出不遵守命名法则确实难读多了),知道这个规律之后这些变量的用途大家都能顾名思义了,如果确实不能也能根据最终生成的代码推断出它的用法的。此外,如果觉得每次都要从“我的模板下”选择很麻烦的话,可以用更改后自定义模板替换系统中的模板。在刚刚编辑模板时我们还看到了一些简单逻辑,比如当使用的项目.NET Framework版本为3.5时会自动使用System.Linq命名空间,我们还可以模范系统模板中的逻辑增加更多更符合个人或者公司需要的逻辑。

 

周公

2010-06-20

Tag标签: .NET,ASP.NET,Visual Studio周公
关注 - 0
粉丝 - 6
荣誉:推荐博客关注博主11 0 0(请您对文章做出评价)posted @ 2010-06-21 09:52 周公 阅读(2856) 评论(24)  编辑 收藏
发表评论1878711 回复 引用 查看    #1楼2010-06-21 10:21 | 炸药3       不错。特别进行表扬
 回复 引用 查看    #2楼2010-06-21 10:50 | icjyw.com       很是实用
 回复 引用 查看    #3楼2010-06-21 10:57 | 马老虎       受教了!!
 回复 引用 查看    #4楼2010-06-21 11:20 | oec2003       周公也来园子了啊
 回复 引用 查看    #5楼[楼主]2010-06-21 11:27 | 周公       @oec2003
0bug在那里,jiri也要去那里,我只好找找清净一点的地方了。
 回复 引用 查看    #6楼2010-06-21 11:40 | Junior Lau       可以直接就修改:
D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplatesCache
或:
D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache
底下的文件。

对于你自己的模板项目,可以用 文件-〉导出模板 功能。

在两个$号中间可以加参数如:$year$ 会在这个位置输出当前年。

模板参数(区分大小写):
clrversion 当前CLR版本
GUID [1-10] 当前工程GUID
itemname 新建项目的名称
machinename 当前计算机名。
projectname 当前工程名。
registeredorganization 注册表值
rootnamespace 默认的命名空间。
safeitemname 可包含空格,不安全字符的项名称
safeprojectname 可包含空格,不安全字符的工程名称
time 创建时的时间, DD/MM/YYYY 00:00:00.
userdomain 当前域
username 系统登录用户
year 年, YYYY.


 回复 引用 查看    #7楼2010-06-21 11:46 | 九月烟花梦       周公解梦???
 回复 引用 查看    #8楼2010-06-21 11:46 | 搞IT的狐狸       我使用了你的 放啊 可是生成的还是没改变过的...........郁闷
 回复 引用 查看    #9楼2010-06-21 11:51 | 寻自己       很实用
 回复 引用 查看    #10楼[楼主]2010-06-21 12:16 | 周公       @搞IT的狐狸
在“我的模板”下选择,不要使用系统的模板。
 回复 引用 查看    #11楼[楼主]2010-06-21 12:18 | 周公      
引用Junior Lau:
可以直接就修改:
D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ProjectTemplatesCache
或:
D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache
底下的文件。

对于你自己的模板项目,可以用 文件-〉导出模板 功能。

在两个$号中间可以加参数如:$year$ 会在这个位置输出当前年。

模板参数(区分大小写):
clrversion 当前CLR版本
GUID [1-10] 当前...


这个总结比较全,其实从名字上就知道值了。
 回复 引用 查看    #12楼2010-06-21 12:44 | 幸运草       很好,很实用,已经用上了,多谢楼主
 回复 引用 查看    #13楼2010-06-21 13:55 | cnbloger       楼主好,有没有研究过解决方案模板,比如可以创建一个包含多个特定项目的solution。
 回复 引用 查看    #14楼2010-06-21 15:55 | 蓝蓝的天       用了下 , 确实很方便
 回复 引用 查看    #15楼2010-06-21 16:19 | 蓝蓝的天       想把我的模板中的名称和图表修改 怎么改啊 , 我看了Interface.vstemplate 文件, 里面的name和id 值不知道从那来, 搜索了下也没发现有这样的文件, 在注册表里搜索,到时发现了不少, 这个可以自定义吗
 回复 引用 查看    #16楼2010-06-21 16:26 | 近水楼台      
周公,你也来园子里了,问候!

现在csdn已经没有技术的氛围了。

 回复 引用 查看    #17楼2010-06-21 16:53 | ji yang       @蓝蓝的天

参看这儿:
http://msdn.microsoft.com/zh-cn/library/31cdwx28%28VS.80%29.aspx

xmlns="' target="_blank" href_cetemp='http://schemas.microsoft.com/developer/vstemplate/2005">'>http://schemas.microsoft.com/developer/vstemplate/2005">

My template
A basic starter kit
TemplateIcon.ico
CSharp



Form1.cs
Form1.Designer.cs
Program.cs
Properties\AssemblyInfo.cs
Properties\Resources.resx
Properties\Resources.Designer.cs
Properties\Settings.settings
Properties\Settings.Designer.cs




 回复 引用 查看    #18楼2010-06-21 17:15 | www.77au.org       受教了,谢谢!
 回复 引用 查看    #19楼[楼主]2010-06-22 07:16 | 周公       @ji yang
谢谢,这个更详细了。
 回复 引用 查看    #20楼2010-06-22 14:26 | 蓝蓝的天       非常感谢,试了下 ,开始不行,后来对照了下模板,好像必须加
2.0
1
这个, 否则在我的模板中显示不处理啊
 回复 引用 查看    #21楼2010-06-25 23:27 | 奇嘉阁       学习
 回复 引用 查看    #22楼2010-06-26 07:03 | MarcoRui       尝试了下VS2010,发现不区分我的模板和系统内建的模板了,不知道是咋回事,WHO HELP一下~~
 回复 引用 查看    #23楼[楼主]2010-06-27 19:13 | 周公       @MarcoRui
我只在VS2005和VS2008下试了,VS2010可能会有所变化。