1

Visual Studio 2005、2008、および 2010 では、特定の ProjectFlavor のプロジェクトの [アイテムの追加] ダイアログにのみ表示されるアイテム テンプレートを定義できますか? できれば、他の無関係なプロジェクトの [アイテムの追加] ダイアログを散らかしたくないです。

は固定された列挙型のようで、 ProjectFlavor <ProjectType>CSharp</ProjectType>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 { ... }
4

1 に答える 1

3

はい、これは可能であり、これを行う「ボックス内」のアイテムテンプレートがいくつかあります。たとえば、WPFアイテム(ページ、ウィンドウ、FlowDocumentなど)のC#またはVBアイテムテンプレートは、WPFフレーバーのプロジェクトで作業している場合にのみ表示されます。

秘訣は、各vstemplateファイルで同じTemplateGroupIDを指定してから、プロジェクトフレーバーの登録でこの同じTemplateGroupIDを指定することです。

于 2010-02-10T18:49:42.563 に答える