65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual Studio 2005 项目和项模板

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.38/5 (32投票s)

2008 年 10 月 26 日

CPOL

9分钟阅读

viewsIcon

119485

downloadIcon

2549

所有关于项目和项模板的内容。您可以使用自定义模板来让您的开发过程比您想象的更快。为 Visual Studio 创建您自己的模板并与其他人共享。您还可以学习如何创建安装程序来安装模板。

介绍 

由于我之前的文章获得了第一名,我觉得我必须写一些新的东西。在本文中,我将描述如何为 Visual Studio IDE 手动创建项目和项模板。

要了解如何为 Visual Studio 创建这些模板,您必须首先了解模板实际上是什么以及它们能够做什么。让我们逐一讨论它们。

模板

模板是创建自定义项目结构并将其与参数关联的简单方法,这样开发团队在开始新项目或向现有项目添加新项时就不必编写类似的代码。因此,模板通常会提高生产力。

通常,在构建项目时,我们浪费了大量宝贵的时间来创建项目项、文件、在每个文件开头编写法律声明、指定文件创建日期、配置应用程序、添加命名空间等。这项工作占用了大量宝贵的时间,因此为项目结构制作一套通用的模板并与公司所有开发人员共享非常方便。在本文中,我们将构建自定义模板来实现这一点。

模板有两种类型

1. 项目模板

当我们创建新项目并将其添加到解决方案时,使用项目模板。当从 IDE 的文件 | 新建项目菜单创建新项目时,项目模板窗口会弹出(如下图所示)。打开对话框时,Visual Studio 会搜索一些特定路径以获取已安装的模板自定义模板。对于已安装的模板,它会搜索%ProgramFiles%\[MicrosoftVisualStudio8]\Common7\IDE\ProjectTemplates\,而对于自定义模板,它会搜索%UserProfile%\MyDocuments\Visual Studio 2005\Templates\ProjectTemplates\。在这些文件夹中,您会找到许多压缩文件。这些文件将根据与每个压缩文件关联的一个元数据文件进行提取并添加到您的项目中。元数据文件的扩展名为.vstemplate(文件名无关紧要)。

ProjectPopup.JPG

2. 项模板

另一方面,每当向项目添加新项时,都会使用项模板。当我们想要向项目添加一些自定义文件类型时,项模板会很方便。您可以自定义文件以包含法律声明、自定义 import/using 语句、默认Namespace、名称、文件创建日期等。与项目模板类似,已安装的项模板存储在%ProgramFiles%\[MicrosoftVisualStudio8]\Common7\IDE\ItemTemplates\#1033\文件夹中,自定义项模板存储在%UserProfile%\MyDocuments\Visual Studio 2005\Templates\ItemTemplates\中。

addnewitem.png

对于项目模板和项模板,都有一个特定的文件夹结构,这使您能够选择项的适当位置。如果您希望您的项或项目模板显示在弹出窗口的 C# 主题中,则可以选择CSharp文件夹;对于 Visual Basic,则选择VisualBasic文件夹。因此,您可以在安装过程中轻松对模板进行分类。

在接下来的部分中,我将向您展示如何使用向导制作模板,然后我将使用手动方法来构建自定义模板并进行安装。

使用向导制作模板

要使用向导制作模板,请遵循以下简单步骤

1. 打开一个现有项目,其中包含在为新项目打开模板时所需的大部分代码。

2. 向文件中添加参数,这些参数将在从模板创建新项目时被替换。参数有两种类型

a. 模板参数:Microsoft 已经定义了一些您可以在代码中使用的参数。参数列表如下所示

参数名称 描述
clrversion 替换当前版本的 CLR。
GUID [1-10] 您可以为一个项目生成 10 个 GUID。参数将被文件中唯一的 GUID 替换
itemname 用户在“添加项”弹出对话框中提供的名称
machinename 计算机名称
projectname 替换用户在“项目弹出对话框”中输入的项目名称
registeredorganization 计算机注册到的组织名称。它从HKLM\Software\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization注册表项获取值
rootnamespace 要将项目文件添加到其中的命名空间。它返回当前的根命名空间信息
safeitemname 返回当前文件名
safeprojectname 返回用户在“项目对话框”中选择的项目名称
时间 返回文件创建时间
userdomain 用户域名
用户名 获取当前用户名
year 文件创建年份

您需要在代码文件的参数名称的开头和结尾添加$,例如$time$将被项目创建的实际日期/时间替换。这些参数的完整描述可以在Microsoft 网站上找到。

下面显示了一个使用这些参数的示例

用于创建文件的模板代码是

// Legal Notice goes here
// File Created :  $time$
// Created By :    $username$

using System; 
using System.Collections; 
using System.IO;
using System.Text;
using MyOrganization.$safeprojectname$;

namespace MyOrganization.$safeprojectname$
{
    public class $safeitemname$
    {
        #region Variables
        //Declare Variables
        #endregion
       
        # region Properties
        // Declare Properties
        #endregion

        # region Events
        //Declare Events
        # endregion

        #region Constructors
        //Declare Constructors
        public $safeitemname$()
        {
        } 
        #endregion

        #region Methods
        //Declare Methods 
        #endregion
     } 
} 

上述代码在模板中使用了几个参数,这些参数将在实际项目中被替换。实际类将如下所示

Coolsnap4.JPG

b. 自定义参数:您还可以通过直接编辑元数据文件(.vstemplate)来定义自己的自定义参数。只需在元数据文件的<TemplateContent>元素中添加<CustomParameter>,如下所示

<TemplateContent>
<CustomParameters>
        <CustomParameter Name="$CustomParameter1$" Value="Param1"/>
        <CustomParameter Name="$CustomParameter2$" Value="Param2">
</CustomParameters> 
</TemplateContent>  

有关添加自定义参数的更多信息可从MSDN 帮助获得。

3. 创建用于模板的应用程序后,将dllnamespace添加到所需的文件中。例如,如上图所示,我已将一个dll添加到我的项目中,并为项目添加了一个自定义namespace。完成后,从菜单中单击文件 | 导出为模板。向导将启动,显示以下屏幕

Snap2.JPG

在这里,您可以选择项目模板项模板。目前我们选择项目模板。在列表中,如果您的解决方案中有多个项目,您还可以选择要用作模板的项目。

4. 单击下一步后,向导将显示以下屏幕

Snap3.JPG

在此屏幕上,选择将作为__TemplateIcon.ico放置在存档中并稍后由“新建项目”对话框使用的模板图标。在此屏幕上,您还可以指定模板名称、输入描述以及自动将模板导入 Visual Studio。

单击完成将生成模板。如果选中了自动导入复选框,则压缩存档将放置在您的本地用户配置文件模板目录中。您还可以将 zip 文件移动到不同的文件夹以对模板进行分类。例如,如果您希望模板出现在 C# 部分,请将zip文件放入CSharp文件夹。我创建的示例模板可在此处下载:下载 OrganizedClassLibrary.zip - 8.38 KB

对于项模板,我们选择要用作模板的文件,项模板将存储在用户模板目录的ItemTemplate文件夹中。

注意:导出时,您可以根据需要向模板添加任意数量的自定义dll,但最好使用 GAC 中注册的dll,而不是将 DLL 放入模板的zip存档中。

理解元数据文件

要不使用 IDE 手动创建模板,需要手动创建与模板关联的所有文件并将解决方案文件放入其中,但本文不涉及解决方案文件的解释。您还需要在压缩存档中放置一个名为__TemplateIcon.ico的图标文件和元数据(.vstemplate)文件,并将其保存到Template目录中。

让我们看一下下面显示的.vsTemplate文件的架构

<VSTemplate Version="2.0.0" 
	xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  <TemplateData>
    <Name>OrganizedClassLibrary</Name>
    <Description>Custom Class Library For My Orgarnization</Description>
    <ProjectType>CSharp</ProjectType>
    <ProjectSubType>
    </ProjectSubType>
    <SortOrder>1000</SortOrder>
    <CreateNewFolder>true</CreateNewFolder>
    <DefaultName>OrganizedClassLibrary</DefaultName>
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
    <Icon>__TemplateIcon.ico</Icon>
  </TemplateData>
  <TemplateContent>
    <Project TargetFileName="TemplateLibrary.csproj" 
	File="TemplateLibrary.csproj" ReplaceParameters="true">
      <ProjectItem ReplaceParameters="true" 
		TargetFileName="App.config">App.config</ProjectItem>
      <ProjectItem ReplaceParameters="true" 
		TargetFileName="BaseClassAll.cs">BaseClassAll.cs</ProjectItem>
      <Folder Name="Properties" TargetFolderName="Properties">
        <ProjectItem ReplaceParameters="true" 
		TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
      </Folder>
    </Project>
    <References>
        <Reference>
            <Assembly>
                System, Version=2.0.0.0, 
			Culture=neutral, PublicKeyToken=b77a5c561934e089
            </Assembly>
        </Reference>
        <Reference>
            <Assembly>
                System.Data, Version=2.0.0.0, 
			Culture=neutral, PublicKeyToken=b77a5c561934e089
            </Assembly>
        </Reference>
    </References>    
   <CustomParameters>
        <CustomParameter Name="$CustomParameter1$" Value="Param1"/>
        <CustomParameter Name="$CustomParameter2$" Value="Param2">
    </CustomParameters>   
  </TemplateContent>
</VSTemplate>

.vstemplate文件的结构由三个元素组成

1. VSTemplate:此元素包装元数据元素。VsTemplate标签有几个属性。version属性指定模板所针对的 .NET 版本,Type属性指示模板是项目模板还是项模板。

2. TemplateData:定义模板在“新建项目”对话框或“新建项”对话框中的显示方式。

子元素

元素 描述
名称 指定模板在新建项目添加新项对话框中显示的名称。这是必需的。
描述 指定模板附带的描述。这是必需的。
图标 与模板关联的图标文件
ProjectType 项目类型,可以是ItemProject
ProjectSubType 指定一个特定的子类别。这是可选的。例如
<ProjectSubType>SmartDevice-NETCFv2</ProjectSubType>
Template ID 指定模板 ID。
SortOrder 指定模板的排列顺序
CreateNewFolder 指定项目实例化时是否创建文件夹。这是可选的
DefaultName 默认生成的项目名称
ProvideDefaultName 设置项目或项的默认名称
EnableLocationBrowseButton 指定浏览按钮是否可用
隐藏 指定模板是否会被列出
NumberofParentCategoriesToRollUp 指定将在新建项目对话框中显示模板的父类别数量。
LocationFieldMRUPrefix 可选
LocationField 指定“新建项目”对话框中的位置文本框是启用、禁用还是隐藏。
SupportsMasterPage 模板是否支持网站的母版页
SupportsCodeSeparation 指定模板是否支持代码分离,或 Web 项目的代码隐藏页模型。
SupportsLanguageDropDown 指定模板是否适用于多种语言,以及新建项目对话框中是否提供语言选项。

3. TemplateContent:定义项目将创建的文件结构。定义自定义参数、向项目添加引用等。其子元素如下

ElementName 描述
ProjectCollection 指定多项目模板的组织和内容。当您的模板需要创建多个项目时,可以使用此元素。例如
<ProjectCollection>
  <ProjectTemplateLink 
         ProjectName="My Windows Application">
      WindowsApp\MyTemplate.vstemplate
    </ProjectTemplateLink>
 <ProjectTemplateLink 
             ProjectName="My Class Library">
    ClassLib\MyTemplate.vstemplate
   </ProjectTemplateLink>
 </ProjectCollection>
项目 指定要添加到项目的文件或目录。这是可选的。
参考文献 指定项模板所需的程序集引用
ProjectItem 指定模板中包含的文件
CustomParameters 指定从模板创建项目或项时要使用的任何自定义参数

这些元素可用于手动创建.vstemplate文件。更多信息可从MSDN获得

为模板创建安装程序

要创建直接安装您的模板的安装程序,您需要遵循以下步骤

  1. 创建模板文件。
  2. 将文件放置到所需的文件夹,即%USERPROFILE%\My Documents\Visual Studio 2005\Templates目录。
  3. 将模板将引用的dll安装到 GAC 中。为此,只需右键单击安装程序的文件系统选项卡,添加特殊文件夹,选择全局程序集缓存并将dll添加到其中。dll将自动安装到 GAC 中并从中引用。

snapInstaller.JPG

4. 运行Setup并查看其工作原理。您也可以尝试我的示例安装程序,可以从以下 URL 下载
下载 InstallerApplication.zip - 355.26 KB

历史

  • 文章第一版于 2009 年 10 月 29 日发布
  • 第二版:修复了布局问题。
© . All rights reserved.