雁过请留痕...
代码改变世界

VS2010 如何制作项目模板

2012-09-11 16:14  xiashengwang  阅读(4880)  评论(0编辑  收藏  举报

模板的制作

在vs2010中制作模板文件非常简单,直接点击菜单中的文件à保存为模板,就可以另存为工程模板或是项目模板了。保存选项里可以选择模板的图标。

做好的模板需要放到下面这两个目录中:

C:\Documents and Settings\wz\My Documents\Visual Studio 2010\Templates\ProjectTemplates

C:\Documents and Settings\wz\My Documents\Visual Studio 2010\Templates\ItemTemplates

然后新建一个工程,你就发现这些模板已经可以用了。

模板中参数使用注意事项:

1,对于工程模板

由于牵涉到程序集的一些信息,比如公司信息,guid等,需要用模板变量来替换,不然每次生成的工程都一样了。AssemblyInfo.cs文件需要做如下的修改:

[assembly: AssemblyTitle("$safeprojectname$")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("$registeredorganization$")]
[assembly: AssemblyProduct("$safeprojectname$")]
[assembly: AssemblyCopyright("Copyright (C) $registeredorganization$ $year$")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: Guid("$guid1$")]

项目中的类使用的命名空间要用$safeprojectname$:

namespace $safeprojectname$
{
}

2,对于项目模板

这里已经罗列出了所有的保留模板参数,这些参数对于工程模板是一样的,唯一有点区别的是:$rootnamespace$仅在项目模板中有效,而$projectname$在工程模板才有效的。

项目模板中的namespace要用$rootnamespace$

namespace $rootnamespace$
{
    /// <summary>
    /// clrversion:$clrversion$
    /// Guid:$guid1$
    /// itemname:$itemname$
    /// machinename:$machinename$
    /// projectname:$projectname$
    /// registeredorganization:$registeredorganization$
    /// safeprojectname:$safeprojectname$
    /// time:$time$
    /// userdomain:$userdomain$
    /// username:$username$
    /// webnamespace:$webnamespace$
    /// year:$year$
    /// </summary>
    public class $safeitemname$ : BaseLibrary
    {
    }
}

带safe开头的几个变量去掉了不安全字符和空格。

添加一个项目后的效果:

namespace CMM.UserKanriApi.ClientTier.BusinessLogic
{
    /// <summary>
    /// clrversion:4.0.30319.269
    /// Guid: 5c7655a2-5413-4031-98fb-b52c8e1a52a0
    /// itemname:GetSemmeiBusinessLogic
    /// machinename:ss-pc
    /// projectname:$projectname$
    /// registeredorganization:sk
    /// safeprojectname:$safeprojectname$
    /// time:2012/09/11 14:51:28
    /// userdomain: ss-pc
    /// username:wz
    /// webnamespace:$webnamespace$
    /// year:2012
    /// </summary>
    public class GetSemmeiBusinessLogic : BaseLibrary
    {
    }
}

用上面这些保留参数基本上就可以满足我们的要求了。如果需要一些更复杂的配置,可以修模板的MyTemplate.vstemplate文件。如添加自定义参数(摘自MSDN):

<TemplateContent>
    ...
    <CustomParameters>
        <CustomParameter Name="$MyParameter1$" Value="MyValue2"/>
        <CustomParameter Name="$MyParameter2$" Value="MyValue2"/>
    </CustomParameters>
</TemplateContent>

在模板的一个或多个代码文件中使用该参数。 例如:

string Value1 = "$MyParameter1"
string Value2 = "$MyParameter2"

3,对于webservice类型的模板,要再次编辑模板文件。

webservice类型的文件包含一个xxx.asmx,这个文件默认是不进行参数替换的,造成每次加入一个模板文件,修改了类名,但是这个文件里对应的类名没有随着变化。造成程序错误,对应方法可以手动修改这个文件,但最好的方式是建模板文件的时候从新修改一下模板,就可以解决这个问题,具体修改方法如下:

打开MyTemplate.vstemplate这个文件,

1,对于xxx.asmx文件,ReplaceParameters改为true,加入OpenInEditor="false" 

2,对于xxx.asmx.cs文件,加入OpenInEditor="true"。

  <TemplateContent>
    <References />
    <ProjectItem OpenInEditor="false" SubType="" TargetFileName="$fileinputname$.asmx" ReplaceParameters="true">WebService_t.asmx</ProjectItem>
    <ProjectItem OpenInEditor="true" SubType="Code" TargetFileName="$fileinputname$.asmx.cs" ReplaceParameters="true">WebService_t.asmx.cs</ProjectItem>
  </TemplateContent>

3,修改xxx.asmx文件内容为:

<%@ WebService Language="C#" CodeBehind="$fileinputname$.asmx.cs" Class="$rootnamespace$.$safeitemname$" %>

4,重新打包上诉的几个文件成zip文件。收工。