2010-02-10 37 views
1

在Visual Studio 2005,2008和2010中,是否可以定義僅出現在特定ProjectFlavor項目的「添加項目」對話框中的項目模板?如果我能提供幫助,我寧願不要混淆所有其他無關項目的「添加項目」對話框。VSX:ProjectFlavor-only項目VSTemplates?

似乎<ProjectType>CSharp</ProjectType>是一個固定的枚舉,我找不到ProjectFlavor GUID或其他任何地方。

我沒有看到其他產品顯示這種剋制的任何例子,但我想確保。

=====

OK,亞倫的技巧是非常有前景的,但我的第一次嘗試不成功。

在.vstemplate:

<TemplateData> 
    <Name>MyProject A File</Name> 
    <Description>MyProject A File to do stuff</Description> 
    <Icon>A.ico</Icon> 
    <TemplateID>TemplateID_A</TemplateID> 
    <TemplateGroupID>MyTemplateGroupID</TemplateGroupID> 
    <ProjectType>CSharp</ProjectType> 
    <RequiredFrameworkVersion>2.0</RequiredFrameworkVersion> 
    <SortOrder>20</SortOrder> 
    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp> 
    <DefaultName>Template_A.cs</DefaultName> 
    <ProvideDefaultName>true</ProvideDefaultName> 
    <ShowByDefault>false</ShowByDefault> 
</TemplateData> 
<TemplateContent> 
    <ProjectItem ReplaceParameters="true">Template_A.cs</ProjectItem> 
</TemplateContent> 

而且在package.cs:

// [ProvideProjectItem(typeof(MyProjectFactory), "MyTemplateGroupID", 
// @"Templates\ProjectItems", 600)] // Took this out. 

[ProvideProjectFactory(typeof(MyProjectFactory), 
    "My Project", "My Project Files (*.csproj);*.csproj", 
    null, null, @"Templates\Projects", 
    LanguageVsTemplate = "CSharp", 
    NewProjectRequireNewFolderVsTemplate = true, 
    TemplateGroupIDsVsTemplate="MyTemplateGroupID", 
    TemplateIDsVsTemplate = "TemplateID_A,TemplateID_B")] 
public sealed class MyPackage : Package { ... } 

回答

3

是的,這是可能的,也有 「盒子」 是這樣做的幾個項目模板。例如,您會注意到WPF項目(頁面,窗口,FlowDocument等)的C#或VB項目模板僅在您使用WPF風格項目時纔會顯示。

訣竅是在每個vstemplate文件中指定相同的TemplateGroupID,然後在註冊項目風格時指定相同的TemplateGroupID。

+0

非常感謝Aaron,你可以在頂部查看額外的格式化內容以便跟進嗎? – 2010-02-10 19:21:10

+0

嗨亞倫,有關這方面的進一步細節? – 2010-02-17 21:06:43

+0

在上面當你說「在VSCT中」時,我假定你的意思是「在VSTemplate中」。 嘗試將LanguageVsTemplate =「CSharp」添加到屬性。 – 2010-02-18 18:56:18