VS2010 MPF:为自定义项目填充"添加 - >新项目..."列表

Gia*_*awa 6 c# extensibility visual-studio-2010 mpf visual-studio

我已经创建了一个自定义语言包,它扩展了ProjectPackage.我可以正确地创建新项目.我希望能够使用Add-> New Item ...(Ctrl + Shift + A)菜单项将新的源文件添加到项目中.但是,当我单击此时,可用模板列表为空.我想将自己的自定义模板添加到此项目类型的可用模板菜单中.是否有一些文件来完成这个?我见过的唯一提到的就是注册表黑客攻击,但我必须想办法以编程方式进行.

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

唉,这个模板根本没有出现,即使我已经将它包含在VSIX中并将其复制到输出目录中.如果我将此模板放在与我的.vproj相同的文件夹中,它将显示为用于创建新项目的模板(错误!),但仍然不会出现在我的新项目列表中.这可能都源于我不使用VSTemplate来创建我的项目.相反,我使用[ProvideProjectFactoryAttribute]让VS2010知道我的vproj文件在哪里,并且它将使用vproj文件(我猜你可以调用模板,但它不是VSTemplate,它是一个项目)来建立新的项目.

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

Giawa

Gia*_*awa 4

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

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

  <Content>
    <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage>
    <ProjectTemplate>ProjectTemplates</ProjectTemplate>
    <ItemTemplate>ItemTemplates</ItemTemplate>
  </Content>
Run Code Online (Sandbox Code Playgroud)

现在,您还必须向内置 vsix 包的 .csproj 文件添加一些属性。这些属性可能可以通过一些复杂的方法添加,但最简单的方法是将它们直接放入 .csproj 文件中。

  <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>
Run Code Online (Sandbox Code Playgroud)

现在,这会将您的 zip 文件包含到您的项目中,如果幸运的话,您现在将拥有正确链接在一起的项目和项目。

幸运的是,有相当多的项目/项目模板文档。我花了一段时间才意识到这是正确的方法。祝你好运,

吉瓦