2011-07-26 23 views
6

我創建了一個自定義語言包,它擴展了ProjectPackage。我可以正確創建新項目。我希望能夠使用Add-> New Item ...(Ctrl + Shift + A)菜單項將新的源文件添加到項目中。但是,當我點擊此時可用模板列表爲空。我想將我自己的自定義模板添加到此項目類型的可用模板菜單中。有沒有一些文件來完成這個?我見過的唯一提到的是註冊表黑客,但必須有一種方法可以按照我的想法進行編程。VS2010 MPF:爲自定義項目填充'Add-> New Item ...'列表

是否有一個特定的方法,我可以重寫來填充列表?我真的需要製作一個模板,還是隻能顯示'模板名稱','圖標'並提供正確的文件擴展名(創建時文件應該是空的,所以我認爲模板很大程度上是浪費在我想要的去做)。

這裏是我到目前爲止一直在旅行的路徑。我想我可以在我的自定義.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> 

唉,這個模板不會顯示在所有,即使我在VSIX包括它並將其複製到輸出目錄。如果我將該模板放在與.vproj相同的文件夾中,它將顯示爲用於創建新項目的模板(錯誤!),但仍不會顯示在我的新項目列表中。這可能來自於我不使用VSTemplate創建項目的事實。相反,我使用[ProvideProjectFactoryAttribute]讓VS2010知道我的vproj文件在哪裏,它將使用vproj文件(我猜你可以調用一個模板,但它不是VSTemplate,它是一個項目)項目關閉。

這就是我到目前爲止的地方,我正在繼續嘗試新事物。我希望有人可能有我正在尋找的答案。謝謝,

Giawa

回答

4

大量的閱讀和工作結束後,這裏是我的答案:

用於項目和項目vstemplate文件,並把它們編譯成vstemplate(不復制到輸出,不包括VSIX,與Microsoft Walkthrough建議的相反)。編譯器會將每個項目和項目模板打包到他們自己的zip文件中。現在,你需要告訴vsixmanifest這些文件在哪裏。項目和項目的默認目錄分別是ProjectTemplates和ItemTemplates。將它們添加到您的vsixmanifest像這樣:

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

現在,你還必須有的屬性添加到您的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> 

這會將您的zip文件包含到您的項目中,如果運氣好的話,您現在可以將項目和項目正確鏈接在一起。

幸運的是,項目/項目模板中有相當多的文檔。我花了一段時間才意識到這是正確的方法。祝你好運,

Giawa

+0

這對我非常有幫助。缺少的成分是將元素添加到清單。我找不到需要這樣做的參考。如果我能給你一個以上的投票,我會!希望我沒有浪費那麼多小時,在我發現這個之前摸索周圍... – MarkPflug

+0

此外,我意識到,在遵循[演練](https://msdn.microsoft.com/en-us/library/cc512961%28v= VS.100%29.aspx?f = 255&MSPPError = -2147217396),右鍵單擊項目節點時,菜單中沒有「delete」或「remove」命令。 –

0

所有這些步驟可以自動的Visual Studio內完成:

首先創建一個單獨的項目項模板(可通過File > Export template做到這一點)。您可以通過編輯.vstemplate文件來自定義此模板。

後你有.zip文件,將其拖放到你的主VSPackage解決方案並執行以下操作:

  1. 點擊.vsixmanifest文件。
  2. 點擊Assets > New
  3. Set Type to Microsoft.VisualStudio.ItemTemplateItem Template)。
  4. Source設置爲File on filesystem
  5. Path設置爲您的項目模板.zip文件。
  6. 重建的解決方案。

注:我用的Visual Studio 2013