Visual Studio 2013/2015中C++项目模板缺失

8
我将尝试为Visual Studio 2013(专业版)C ++项目创建一些简单的项目模板,但是似乎与Visual Studio相冲突。我开始使用“文件->导出模板...”向导,完成并生成了一个zip文件,但新模板在“添加新项”对话框中无处可见,因此我开始手动编辑它以查看是否能够修复它。
这是我的测试“.vstemplate”文件:
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
  <TemplateData>
    <DefaultName>test</DefaultName>
    <Name>Test</Name>
    <Description>Test item template.</Description>
    <ProjectType>VC</ProjectType>
    <!--<SortOrder>10</SortOrder>-->
    <Icon>icon.ico</Icon>
  </TemplateData>
  <TemplateContent>
    <ProjectItem TargetFileName="$fileinputname$.h" ReplaceParameters="true">test.h</ProjectItem>
  </TemplateContent>
</VSTemplate>

我尝试使用VCVisualC作为<ProjectType>并将模板放置在不同的文件夹中,以压缩和展开形式。修改<ProjectType>CSharp并创建一个C#项目后,该模板会立即显示出来。有趣的是,如果%USERPROFILE%\Documents\Visual Studio 2013\Templates\ItemTemplates\Visual C#目录为空,则无论它位于%USERPROFILE%\Documents\Visual Studio 2013\Templates\ItemTemplates还是%USERPROFILE%\Documents\Visual Studio 2013\Templates\ItemTemplates\Visual C++ Project目录中,该模板现在都会显示出来,但如果它的副本也存在于Visual C#目录中,则会在新项目对话框中出现两次...... 我知道 Visual Studio 2013 Express RC 中存在一个错误,即“新建元素”对话框根本不会显示任何模板,甚至是内置的那些,所以我认为这可能是 Visual Studio 的一个 bug,或者只是微软对 C++ 的令人担忧的漠视。我是否遗漏了什么,还是这是 VS2013 的一个问题?如果是的话,是否有人知道任何解决方法?编辑:此问题在 Visual Studio 2015 RC 中仍然存在。

这是一个正在进行中的工作,C++项目模板仍然使用与code wizards兼容的传统格式。也许下一个版本会有所改进。 - Hans Passant
1
@HansPassant 感谢您提供的信息。看起来,如果导出模板工具不支持VC模板,他们应该在使用时发出警告...也许等到C++11完全支持时,这个问题就会得到解决...可能要10年左右。无论如何,请回答并我会接受它。 - bcrist
1
哇,已经10个月了还是没有答案。我也在寻找解决方案。 - DollarAkshay
1
尝试使用VS2015 Preview,情况相同。模板没有显示出来。 - nikoniko
3
这对我也是一个问题。我已经在Microsoft Connect上提出了这个问题:https://connect.microsoft.com/VisualStudio/feedback/details/1094450 - Jon Cage
2个回答

5

我有同样的问题。对我起作用的解决办法是使用VS2013 Express版,因为C++项目模板可以正常工作(就像在VS2012 Pro/Express中一样)。我不知道为什么这个方便的功能已经从专业版中移除,但它仍然在免费的Express版本中继续工作。


我也遇到了这个问题。需要安装多个版本的IDE才能让它正常工作,这很愚蠢。不过这篇文章确实很有帮助!我会点赞这个回答。谢谢 :) - K-Dawg

0

我第一次尝试使用VS模板,结果就遇到了这个问题!真是太棒了!

经过几个小时的摸索,我现在能够添加自己的模板了,至少在VS Community 2013中可以。我认为诀窍是添加<TemplateGroupID>WinRT-Common</TemplateGroupID>。供参考,这个项目模板在一个空的C++项目中出现:

<?xml version="1.0" encoding="utf-8"?>
<VSTemplate Version="3.0.0" Type="Item" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
  <TemplateData>
    <Name>GameEngine Core Class</Name>
    <Description>Creates a header and source file for a new GameEngine Core class.</Description>
    <Icon>__TemplateIcon.png</Icon>
    <TemplateGroupID>WinRT-Common</TemplateGroupID>
    <ProjectType>VC</ProjectType>
    <DefaultName>GameEngineClassName</DefaultName>
  </TemplateData>
  <TemplateContent>
    <ProjectItem TargetFileName="$fileinputname$.cpp" ReplaceParameters="true" OpenInEditor="true">GameEngineClass.cpp</ProjectItem>
    <ProjectItem TargetFileName="$fileinputname$.h" ReplaceParameters="true" OpenInEditor="true">GameEngineClass.h</ProjectItem>
  </TemplateContent>
</VSTemplate>

对于TemplateGroupID,默认值(VC-Native)和VC-Windows似乎都不起作用(here是完整列表)。我不确定将WinRT-Common放在那里会有什么进一步的影响。它甚至没有列出来。
更多细节:我从VS2013附带的ComputeShader.vstemplate开始尝试实验,将其放入模板文件夹并修改文件,直到现在为止。在某个地方,我意识到将所有内容放入.zip文件中非常重要,即使最初似乎可以工作,因为当涉及到检测模板时,Visual Studio最终会表现得非常奇怪(在我意识到这一点之前,这非常令人沮丧)。我想这与缓存有关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接