Visual Studio 2013自定义项目Web模板不显示

时间:2015-07-16 08:55:46

标签: visual-studio

我在visual studio 2013 Update 4上为web创建项目模板。
我创建了一个项目" C#项目模板"类型。
我将vstemplate文件编辑为:(如:https://msdn.microsoft.com/en-us/library/ms171386.aspx)所述

 <ProjectType>Web</ProjectType>
 <ProjectSubType>CSharp</ProjectSubType>

然后我添加了一个vsix项目并添加了一个资产即模板项目。 这是xml编辑器中的vsixmanifest资产部分:

<Assets>
    <Asset Type="Microsoft.VisualStudio.ProjectTemplate" d:Source="Project" d:ProjectName="MyTestProjectTemplate" d:TargetPath="|MyTestProjectTemplate;TemplateProjectOutputGroup|" Path="ProjectTemplates" d:VsixSubPath="ProjectTemplates" />
</Assets>

如果我将ProjectType签名为CSharp,项目模板将列在&#34; CSharp&#34;但是当它被列为上面所描述的网络时,它根本就没有显示出来。
有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我希望它会帮助别人。
你必须设置vstemplate:

<ProjectType>CSharp</ProjectType>
<TemplateGroupID>Web</TemplateGroupID>

在vstemplate文件属性(F4)(解决方案资源管理器)中,您必须将类别设置为Web。
如果您将检查编译结果输出,现在是:

 bin\Debug\ProjectTemplates\CSharp\Web\1033\<Your Template Zip> 

查看模板项目的 csproj文件,您会看到:

<ItemGroup>
      <VSTemplate Include="MyTestProjectTemplate.vstemplate">
           <SubType>Designer</SubType>
           <OutputSubPath>Web</OutputSubPath>
      </VSTemplate>
 </ItemGroup>

这是类别 - &gt;网页结果。 (我想知道为什么我没有看到这个定义在vstemplate文件中影响它...所以这就是答案。它是csproj文件中的一个定义。)
将vsix和项目添加为项目模板资产,它按预期工作。
当我们理解问题是模板zip所在的路径时,它更简单,也可以解决多个项目模板。

现在是一个多项目模板!

在这种情况下,您有一个zip文件,其中包含root vstemplate和每个包含项目的子文件夹。

  1. root vstemplate文件必须使用以下方式签名:

     <ProjectType>CSharp</ProjectType>
     <TemplateGroupID>Web</TemplateGroupID>
    
  2. 在vsix项目文件夹中,您必须添加以下文件夹:(关闭visual studio并在windows中的visual studio外部进行。)

    ProjectTemplates\CSharp\Web\1033
    
  3. 在1033文件夹下添加模板zip。(视觉工作室外)

  4. 打开visual studio,在解决方案资源管理器窗格中选择“显示所有文件”。
    在vsix项目中向下滚动到模板zip文件,右键单击并选择“包含在项目中”。

  5. 在模板zip文件属性中,将构建操作更改为内容,将复制始终和包含在VSIX中更改为true。

  6. 在vsixmanifest编辑器中(双击它),添加资产。 项目模板 - &gt;文件系统上的文件 - &gt; zip的路径(必须在下拉框中作为选项)。

  7. 编译vsix项目。打开输出文件夹(通常是bin \ debug),看到结果是根文件夹中的vsix文件和它旁边的以下文件夹树。 ProjectTemplates \ CSHARP \网络\ 1033 \。

  8. 运行vsix并查看“Web”下的项目模板。

  9. 沉默片刻。让我们记住在这场血战中陷入困境的程序员。 : - )