Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS2010强积金:人口';添加->;新项目…';自定义项目的列表_C#_Visual Studio_Visual Studio 2010_Extensibility_Mpf - Fatal编程技术网

C# VS2010强积金:人口';添加->;新项目…';自定义项目的列表

C# VS2010强积金:人口';添加->;新项目…';自定义项目的列表,c#,visual-studio,visual-studio-2010,extensibility,mpf,C#,Visual Studio,Visual Studio 2010,Extensibility,Mpf,我创建了一个自定义语言包,它扩展了ProjectPackage。我可以正确创建新项目。我想能够添加新的源文件到项目中使用添加->新项目。。。(Ctrl+Shift+A)菜单项。但是,当我单击此按钮时,可用模板列表为空。我想将我自己的自定义模板添加到此项目类型的可用模板菜单中。是否有实现此目的的文档?我所看到的唯一提到的是注册表黑客,但我认为必须有一种方法以编程方式进行 是否有特定的方法可以替代以填充列表?我真的需要制作一个模板吗,或者我可以只显示“模板名称”、“图标”并提供正确的文件扩展名(创建

我创建了一个自定义语言包,它扩展了ProjectPackage。我可以正确创建新项目。我想能够添加新的源文件到项目中使用添加->新项目。。。(Ctrl+Shift+A)菜单项。但是,当我单击此按钮时,可用模板列表为空。我想将我自己的自定义模板添加到此项目类型的可用模板菜单中。是否有实现此目的的文档?我所看到的唯一提到的是注册表黑客,但我认为必须有一种方法以编程方式进行

是否有特定的方法可以替代以填充列表?我真的需要制作一个模板吗,或者我可以只显示“模板名称”、“图标”并提供正确的文件扩展名(创建文件时文件应该是空的,所以我认为模板在很大程度上浪费在我想做的事情上)

这是我到目前为止一直走的路。我想我可以在我的自定义.vproj文件中设置我的项目类型和GUID(.vproj是我的自定义项目注册的文件扩展名)。我想我可以快速创建一个与.vproj文件具有相同项目类型的项目模板

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
  <TemplateData>
    <Icon>VerilogSource.ico</Icon>
    <DefaultName>module.v</DefaultName>
    <Name>Basic Verilog Module</Name>
    <Description>
      A basic Verilog module for quickly adding new files to the project.
    </Description>
    <ProjectType>VerilogProject</ProjectType>
  </TemplateData>
  <TemplateContent>
    <ProjectItem TargetFileName="$fileinputname$.v"
        ReplaceParameters="true">module.v</ProjectItem>
  </TemplateContent>
</VSTemplate>
  <PropertyGroup>
    <GetVsixSourceItemsDependsOn>$(GetVsixSourceItemsDependsOn);GetVsixTemplateItems</GetVsixSourceItemsDependsOn>
  </PropertyGroup>
  <Target Name="GetVsixTemplateItems" DependsOnTargets="ZipProjects;ZipItems">
    <ItemGroup>
      <VSIXSourceItem Include="@(IntermediateZipItem)">
        <VSIXSubPath>ItemTemplates\%(IntermediateZipItem.Language)\%(IntermediateZipItem.OutputSubPath)\%(IntermediateZipItem.Culture)</VSIXSubPath>
      </VSIXSourceItem>
      <VSIXSourceItem Include="@(IntermediateZipProject)">
        <VSIXSubPath>ProjectTemplates\%(IntermediateZipProject.Language)\%(IntermediateZipProject.OutputSubPath)\%(IntermediateZipProject.Culture)</VSIXSubPath>
      </VSIXSourceItem>
    </ItemGroup>
  </Target>

VerilogSource.ico
第五单元
基本Verilog模块
用于快速向项目添加新文件的基本Verilog模块。
VerilogProject
第五单元
唉,这个模板根本没有显示出来,即使我已经将其包含在VSIX中并将其复制到输出目录中。如果我将此模板与我的.vproj放在同一文件夹中,它将显示为创建新项目的模板(错误!),但仍然不会显示在我的新项目列表中。这可能是因为我不使用VSTemplate来创建项目。相反,我使用[ProvideProjectFactoryAttribute]让VS2010知道我的vproj文件在哪里,它将使用vproj文件(我想你可以称之为模板,但它不是VSTemplate,它是一个项目)作为新项目的基础

这就是我目前所处的位置,我将继续尝试新事物。我希望有人能找到我想要的答案。谢谢


Giawa

经过大量阅读和工作,以下是我的答案:

为项目和项目使用vstemplate文件,并将其编译为vstemplate(不要复制到输出,也不要包含在VSIX中,与建议相反)。编译器会将每个项目和项目模板打包到它们自己的zip文件中。现在,您需要告诉vsixmanifest这些文件在哪里。项目和项目的默认目录分别是ProjectTemplates和ItemTemplates。将它们添加到vsixmanifest中,如下所示:

  <Content>
    <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage>
    <ProjectTemplate>ProjectTemplates</ProjectTemplate>
    <ItemTemplate>ItemTemplates</ItemTemplate>
  </Content>

|%当前项目%;PkgdefProjectOutputGroup|
项目模板
项目模板
现在,您还必须向内置vsix包的.csproj文件添加一些属性。这些属性可能可以通过一些复杂的方法添加,但最简单的方法是直接将它们放到.csproj文件中

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
  <TemplateData>
    <Icon>VerilogSource.ico</Icon>
    <DefaultName>module.v</DefaultName>
    <Name>Basic Verilog Module</Name>
    <Description>
      A basic Verilog module for quickly adding new files to the project.
    </Description>
    <ProjectType>VerilogProject</ProjectType>
  </TemplateData>
  <TemplateContent>
    <ProjectItem TargetFileName="$fileinputname$.v"
        ReplaceParameters="true">module.v</ProjectItem>
  </TemplateContent>
</VSTemplate>
  <PropertyGroup>
    <GetVsixSourceItemsDependsOn>$(GetVsixSourceItemsDependsOn);GetVsixTemplateItems</GetVsixSourceItemsDependsOn>
  </PropertyGroup>
  <Target Name="GetVsixTemplateItems" DependsOnTargets="ZipProjects;ZipItems">
    <ItemGroup>
      <VSIXSourceItem Include="@(IntermediateZipItem)">
        <VSIXSubPath>ItemTemplates\%(IntermediateZipItem.Language)\%(IntermediateZipItem.OutputSubPath)\%(IntermediateZipItem.Culture)</VSIXSubPath>
      </VSIXSourceItem>
      <VSIXSourceItem Include="@(IntermediateZipProject)">
        <VSIXSubPath>ProjectTemplates\%(IntermediateZipProject.Language)\%(IntermediateZipProject.OutputSubPath)\%(IntermediateZipProject.Culture)</VSIXSubPath>
      </VSIXSourceItem>
    </ItemGroup>
  </Target>

$(GetVsixSourceItemsDependsOn);GetVsixTemplateItems
ItemTemplates\%(IntermediateZipItem.Language)\%(IntermediateZipItem.OutputSubPath)\%(IntermediateZipItem.Culture)
项目模板\%(IntermediateZipProject.Language)\%(IntermediateZipProject.OutputSubPath)\%(IntermediateZipProject.Culture)
这将把您的zip文件包含到您的项目中,如果幸运的话,您现在将拥有正确链接在一起的项目和项目

幸运的是,有很多关于项目/项目模板的文档。我只是花了一段时间才意识到这是正确的道路。祝你好运


Giawa

所有这些步骤都可以在Visual Studio中自动完成:

首先在一个单独的项目中创建一个项模板(您可以通过
文件>导出模板
来完成)。您可以通过编辑
.vstemplate
文件自定义此模板

获得
.zip
文件后,将其拖放到主
VSPackage
解决方案中,然后执行以下操作:

  • 单击
    .vsixmanifest
    文件
  • 单击
    Assets>New
  • 类型
    设置为
    Microsoft.VisualStudio.ItemTemplate
    项目模板
  • 设置为文件系统上的
    文件
  • 路径设置为项目模板
    .zip
    文件
  • 重建解决方案
    注意:我使用的是Visual Studio 2013。

    这对我非常有帮助。缺少的成分是将元素添加到清单中。我找不到需要这样做的参考资料。如果我能给你多投一票,我会的!但愿在找到这个之前我没有浪费这么多时间摸索……我还意识到,在右键单击项目节点后,菜单中没有
    delete
    remove
    命令。