单击菜单添加项目时如何基于特定模板添加项目?

How to add an item based on a specific template when click on menu Add item?

我想创建一个模板,例如(在文件夹中创建一个文件夹 create 1 class 和 1 interface with the names of the folder),它将通过右键单击项目并在菜单,会出现CreateTamplateClass

我可以使用 c# WinForms/控制台应用程序等来完成吗?

TNX

Visual Studio 具有带参数替换的文件夹的多文件项模板

您可以创建一个 C# 项目模板 项目或自己手动创建项目模板 zip 文件。

项目模板 zip 文件应包含以下文件:

  • Class.cs
  • Interface.cs
  • MyItemTemplate.vstemplate

然后您需要将 zip 文件复制到以下文件夹:

  • %USERPROFILE%\Documents\Visual Studio 2017\Templates\ItemTemplates\Visual C#

然后打开 Visual Studio 的新实例和 create/open 一个 C# 项目,然后打开 添加新项 window 并选择 [=来自 Visual C# Items 的 38=]MyItemTemplate 并指定一个类似 MyItem1 的名称,然后将创建以下结构:

以下是 zip 文件中模板文件的内容:

Class.cs

using System;
using System.Collections.Generic;

namespace $rootnamespace$.$basename$
{
    class $safeitemrootname$: I$safeitemrootname$
    {
    }
}

Interface.cs

using System;
using System.Collections.Generic;

namespace $rootnamespace$.$basename$
{
    interface $safeitemrootname$
    {
    }
}

MyItemTemplate.vstemplate

<?xml version="1.0" encoding="utf-8"?>
<VSTemplate Version="3.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" xmlns:sdk="http://schemas.microsoft.com/developer/vstemplate-sdkextension/2010">
  <TemplateData>
    <Name>MyItemTemplate</Name>
    <Description>My multi-file item template</Description>
    <Icon>MyItemTemplate.ico</Icon>
    <TemplateID>52ae3bdb-7fde-4d47-8a4b-d17d0c9269f7</TemplateID>
    <ProjectType>CSharp</ProjectType>
    <DefaultName>MyItem.cs</DefaultName>
  </TemplateData>
  <TemplateContent>
    <References>
      <Reference>
        <Assembly>System</Assembly>
      </Reference>
    </References>
    <ProjectItem TargetFileName="$fileinputname$\I$fileinputname$.cs" ReplaceParameters="true">Interface.cs</ProjectItem>
    <ProjectItem TargetFileName="$fileinputname$$fileinputname$.cs" ReplaceParameters="true">Class.cs</ProjectItem>
    <CustomParameters>
      <CustomParameter Name="$basename$" Value="$fileinputname$"/>
    </CustomParameters>    
  </TemplateContent>
</VSTemplate>