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

将自定义 Visual Studio 代码生成模板添加到“添加新项”对话框

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.53/5 (28投票s)

2003年12月17日

6分钟阅读

viewsIcon

153880

一篇关于将自定义 Visual Studio 代码生成模板添加到“添加新项”对话框的文章

引言

本文将解释如何将新创建或修改的 VS 代码模板添加到 Visual Studio IDE 中的“添加新项”对话框。

背景

在阅读了“sh856531”撰写的关于“自定义 Visual Studio 的代码生成模板”的文章后,我想创建一个接口模板供我自己开发使用。

问题

“如何让新模板在启动‘添加新项’对话框时显示?”

解决方案

我们需要修改 LocalProjectItems 文件夹及其子文件夹中的 VSDir 文件。VSDir 文件是一个扩展名为 .vsdir 的文本文件,它向“添加项”和“新建项目”对话框提供有关如何显示其项的信息,例如它们的名称、显示顺序以及与之关联的图标。您可以在单个目录中拥有多个 VSDir 文件,但通常,单个 VSDir 文件包含多个向导、文件夹和模板的记录。文件中的每条记录都用换行符分隔,并用竖线(|)字符分隔每条记录中的字段。任何没有有意义数据的可选字段都应包含零(0)作为占位符。

以下是 VSDir 文件的示例 [已换行]

..\..\CSharpAddClassWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
  #2245|10|#2262|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|Class.cs
..\..\CSharpAddInterfaceWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
  Interface|20|An empty interface declaration|
  {FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|Interface.cs
..\..\CSharpAddComponentWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
  #2246|20|#2265|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4517|0|Component.cs
..\..\NewCSharpFile.cs|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
  #2261|30|#2267|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4516|0|CodeFile.cs
..\..\CSharpAddWinServiceWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
  #2291|40|#2292|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4520|0|Service.cs
..\..\NewInstaller.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
  #2269|50|#2270|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4518|0|Installer.cs

首先,让我们创建新模板。

所采取的步骤如下

  1. 找到 Visual Studio .NET 安装中的 VC#Wizards 目录。默认安装位置为 C:\Program Files\Microsoft Visual Studio .NET\VC#\VC#Wizards。
  2. 在此目录中创建一个新文件夹,并将其命名为 CSharpAddInterfaceWiz。此名称是根据现有向导遵循的约定得出的。
  3. 将 CSharpAddClassWiz 的内容复制到此新文件夹中。这将为您提供一个 Templates\1033 子目录(以及 Scripts\1033 子目录),其中包含两个文件 - Templates.infNewCSharpFile.cs
  4. 根据您的需求修改 NewCSharpFile.cs。一种方法是使用 Visual Studio .NET 构建所需的 Interface.cs 代码文件,然后将其放入此文件夹中。粗体显示的项将在使用向导将代码文件插入项目时被替换。!output 指令用于向导引擎输出符号值。例如,SAFE_NAMESPACE_NAME 是项目默认名称空间的名称。
  5. namespace [!output SAFE_NAMESPACE_NAME]
    {
           /// <summary>
           /// Summary description for [!output SAFE_CLASS_NAME] Interface.
           /// </summary>
           public class [!output SAFE_CLASS_NAME]
           {
    
                  #region [!output SAFE_CLASS_NAME] Properties
    
                  #endregion    
    
                  #region [!output SAFE_CLASS_NAME] Methods
    
                  #endregion    
           }
    }
    
  6. Visual Studio .NET 使用扩展名为 .vsdir 的文件来识别并加载这些代码模板到“添加新项”对话框中。我们将使用任何文本编辑器修改“C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\CSharpProjectItems\LocalProjectItems\Code”和“C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\CSharpProjectItems\LocalProjectItems”文件夹中的 .vsdir 文件。
  7. 打开“C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\CSharpProjectItems\LocalProjectItems\Code\code.vsdir”文件,您将在文件中看到以下代码行
  8. ..\..\CSharpAddClassWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
      #2245|10|#2262|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|Class.cs
  9. 复制该行,粘贴到下方新的一行,并修改粗体部分
  10. ..\..\CSharpAddInterfaceWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
      Interface|10|An empty interface declaration|
      {FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|Interface.cs
  11. 我们将此行添加到 Code 文件夹内的 .vsdir 文件中,因为我们希望此模板在 Code 部分可用。
  12. 打开“C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\CSharpProjectItems\LocalProjectItems\ LocalProjectItems.vsdir”文件,您将在文件中看到以下代码行
  13. ..\CSharpAddClassWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
      #2245|20|#2262|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|Class.cs
  14. 复制该行,粘贴到下方新的一行,并修改以下内容
  15. ..\CSharpAddInterfaceWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|
      Interface|20|An empty interface declaration|
      {FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|Interface.cs
  16. 打开以下文件夹 C:\Program Files\Microsoft Visual Studio .NET 2003\VC#\CSharpProjectItems 并创建一个名为 CSharpAddInterfaceWiz.vsz 的文件。现在找到 CSharpAddClassWiz.vsz 文件,打开它并将数据复制到您新创建的文件中。我们现在将修改我们新文件 CSharpAddInterfaceWiz.vsz 中的数据以反映以下内容
  17. VSWIZARD 7.0
    Wizard=VsWizard.VsWizardEngine.7.1
    Param="WIZARD_NAME = CSharpAddInterfaceWiz"
    Param="WIZARD_UI = FALSE"
    Param="PROJECT_TYPE = CSPROJ"
  18. Wizard=VsWizard.VsWizardEngine.7.1 这行告诉 Visual Studio 是 2002 年还是 2003 年版本。
  19. 现在,我们应该准备好启动 Visual Studio 并使用我们的新接口模板了。
  20. 以下是 VSDir 文件中字段的说明
      字段 含义
      RelPathName 必需。向导的 .vsz 文件名,例如 MyWizard.vsz
      {clsidPackage} 可选。表示具有包含本地化资源的 DLL 的产品的 GUID(例如 Visual C++)。通常,对于与第三方向导对应的 VSDir 文件,此字段为空。
      LocalizedName 可选。这是向导或模板的本地化名称,也是“添加项”对话框中显示的名称。它可以是字符串或形式为 #ResID 的资源标识符。
      SortPriority 必需。一个整数,表示向导的排序顺序和相对优先级,1 为最高。例如,如果此项为“1”,那么它将与其他的 1 一起显示,并且排在所有 2 或更低的值之前。
      描述 必需。模板或向导在“添加项”对话框中选定项时显示的本地化描述。它可以是字符串或形式为 #ResID 的资源标识符。仅适用于模板文件,不适用于文件夹。
      DLLPath 或 {clsidPackage} 必需。指定 DLL 或 EXE 文件的完整路径,或者一个具有包含向导图标的 .dll 文件的产品的 GUID。使用给定的 IconResourceId 从 DLL/EXE 文件中加载图标作为资源。如果指定了 {clsidPackage},此设置将覆盖其在图标位置的设置。仅适用于模板文件,不适用于文件夹。
      IconResourceId 可选。DLL 文件中的一个资源标识符,用于确定要显示的图标。如果没有定义图标,环境会为扩展名与该项相同的文件的默认图标进行替换。仅适用于模板文件,不适用于文件夹。
      标志 必需。请参见下面的 Flags 描述和表格。仅适用于模板文件,不适用于文件夹。
      SuggestedBaseName 必需。向导的默认名称,在对话框的“名称”字段中显示。它可以是字符串或形式为 #ResID 的资源标识符。如果名称不唯一,环境会在名称后附加一个整数。例如,MyFile.asp 可能会更改为 MyFile1.asp。如果未提供名称,则使用“Project”。仅适用于模板文件,不适用于文件夹。

      注释

      1. 任何非必需字段,如果其没有有意义的数据,都应包含 0(零)作为占位符。
      2. 如果没有提供本地化名称,则使用相对路径名
      3. 如果没有定义图标,IDE 会为具有该扩展名的文件的默认图标进行替换。
      4. 如果没有提供建议的基础名称,则使用“Project”。

    好了,现在您就可以在“添加新项”对话框中使用新的代码模板了。请注意,此项也根项目文件夹中可用。

    这是在代码编辑器中生成后的代码外观

    历史

    • 版本 1.0
    • 版本 1.1 - 添加了原始草稿中遗漏的步骤。

    结论

    这是我的第一篇文章,我希望每个人都能从中受益。来自澳大利亚的问候...

    © . All rights reserved.