Sdílet prostřednictvím


Vytváření šablon vícenásobného projektu

Šablony s více projekty fungují jako kontejnery pro dva nebo více projektů sady Visual Studio. Když vytvoříte projekt založený na šabloně s více projekty, každý projekt v šabloně se přidá do řešení.

Poznámka:

Šablony probírané v tomto článku jsou ty, které se používají při vytváření projektů v sadě Visual Studio, nikoli těch, které dotnet new vytváří.

Šablona s více projekty má dvě nebo více šablon projektů a kořenovou šablonu typu ProjectGroup.

Šablony s více projekty se chovají jinak než jednotlivé šablony projektů. Mají následující jedinečné vlastnosti:

  • Jednotlivé projekty v šabloně s více projekty nelze přiřadit názvy, pokud se šablona používá k vytvoření nového projektu. Místo toho použijte atribut ProjectName u elementu ProjectTemplateLink v souboru vstemplate k zadání názvu pro každý projekt.

  • Šablony s více projekty můžou obsahovat projekty pro různé jazyky, ale celá samotná šablona může být umístěna pouze do jedné kategorie. Zadejte kategorii šablony v elementu ProjectType souboru vstemplate.

Šablona s více projekty musí obsahovat následující položky komprimované do souboru .zip :

  • Kořenový soubor vstemplate pro celou šablonu s více projekty. Tento kořenový soubor vstemplate obsahuje metadata zobrazená v dialogovém okně, kde vytvoříte nový projekt. Určuje také, kde najít soubory vstemplate pro projekty v šabloně. Tento soubor musí být umístěn v kořenovém adresáři souboru .zip .

  • Dvě nebo více složek, které obsahují soubory požadované pro úplnou šablonu projektu. Složky obsahují všechny soubory kódu pro projekt a také soubor vstemplate pro projekt.

Například šablona s více projekty .zip soubor, který má dva projekty, může mít následující soubory a adresáře:

  • MultiProjectTemplate.vstemplate
  • \Project1\MyTemplate.vstemplate
  • \Project1\Project1.vbproj
  • \Project1\Class.vb
  • \Project2\MyTemplate.vstemplate
  • \Project2\Project2.vbproj
  • \Project2\Class.vb

Kořenový soubor vstemplate pro šablonu s více projekty se liší od šablony s jedním projektem následujícími způsoby:

  • Atribut Type elementu VSTemplate má hodnotu ProjectGroup místo Projectu. Příklad:

    <VSTemplate Version="2.0.0" Type="ProjectGroup"
        xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    
  • TemplateContent element obsahuje ProjectCollection element, který má jeden nebo více ProjectTemplateLink element, které definují cesty k vstemplate soubory zahrnuté projekty. Příklad:

    <TemplateContent>
        <ProjectCollection>
            <ProjectTemplateLink>
                Project1\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink>
                Project2\MyTemplate.vstemplate
            </ProjectTemplateLink>
        </ProjectCollection>
    </TemplateContent>
    

Tip

Pokud chcete, aby se v dialogovém okně nový projekt zobrazovala pouze šablona s více projekty, a ne jednotlivé projekty, které obsahuje, označte vnitřní šablony jako skryté. Příklad:

<VSTemplate Type="Project" ... >
    <TemplateData>
        ...
        <Hidden>true</Hidden>
    </TemplateData>
    ...
</VSTemplate>

Vytvoření šablony s více projekty z existujícího řešení

  1. Vytvořte řešení a přidejte dva nebo více projektů.

  2. Přizpůsobte projekty, dokud nebudou připravené k exportu do šablony.

    Tip

    Pokud používáte parametry šablony a chcete odkazovat na proměnné z nadřazené šablony, předpona názvu parametru .ext_ Například $ext_safeprojectname$. Také nastavte CopyParameters atribut ProjectTemplateLink element na true.

    <ProjectTemplateLink ProjectName="MyProject" CopyParameters="true">...</ProjectTemplateLink>
    
  3. V nabídce Projekt zvolte Exportovat šablonu.

    Otevře se Průvodce exportem šablony.

  4. Na stránce Zvolit typ šablony vyberte Šablonu projektu. Vyberte jeden z projektů, které chcete exportovat do šablony, a pak zvolte Další. (Tento postup zopakujete pro každý projekt v řešení.)

  5. Na stránce Vybrat možnosti šablony zadejte název a volitelný popis, ikonu a obrázek náhledu šablony. Zvolte Dokončit.

    Projekt se exportuje do souboru .zip a umístí se do zadaného výstupního umístění.

    Poznámka:

    Každý projekt musí být exportován do šablony samostatně, proto opakujte předchozí kroky pro každý projekt v řešení.

  6. Vytvořte adresář pro šablonu s podadresářem pro každý projekt.

  7. Extrahujte obsah souboru .zip každého projektu do odpovídajícího podadresáře, který jste vytvořili.

  8. V základním adresáři vytvořte soubor XML s příponou souboru .vstemplate . Tento soubor obsahuje metadata pro šablonu s více projekty. Podívejte se na následující příklad struktury souboru. Nezapomeňte zadat relativní cestu k souboru vstemplate každého projektu.

  9. Vyberte všechny soubory v základním adresáři a v místní nabídce klikněte pravým tlačítkem myši nebo v místní nabídce zvolte Složku Odeslat do>komprimované složky (zipped).

    Soubory a složky se komprimují do .zip souboru.

  10. Zkopírujte soubor .zip do adresáře šablony projektu uživatele. Ve výchozím nastavení je tento adresář %USERPROFILE%\Documents\Visual Studio <version>\Templates\ProjectTemplates.

  11. V sadě Visual Studio zvolte Soubor>nový>projekt a ověřte, že se šablona zobrazí.

Příklad se dvěma projekty

Tento příklad ukazuje základní kořenový soubor vstemplate s více projekty. V tomto příkladu má šablona dva projekty: Moje aplikace systému Windows a Knihovna tříd. Atribut ProjectName v elementu ProjectTemplateLink určuje název, který je předán projektu.

Tip

Pokud není zadaný atribut ProjectName, název souboru vstemplate se použije jako název projektu.

<VSTemplate Version="2.0.0" Type="ProjectGroup"
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>Multi-Project Template Sample</Name>
        <Description>An example of a multi-project template</Description>
        <Icon>Icon.ico</Icon>
        <ProjectType>VisualBasic</ProjectType>
    </TemplateData>
    <TemplateContent>
        <ProjectCollection>
            <ProjectTemplateLink ProjectName="My Windows Application">
                WindowsApp\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="My Class Library">
                ClassLib\MyTemplate.vstemplate
            </ProjectTemplateLink>
        </ProjectCollection>
    </TemplateContent>
</VSTemplate>

Příklad se složkami řešení

Tento příklad používá SolutionFolder element k rozdělení projektů do dvou skupin, matematických tříd a grafických tříd. Šablona obsahuje čtyři projekty, z nichž dvě jsou umístěny do každé složky řešení.

<VSTemplate Version="2.0.0" Type="ProjectGroup"
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>Multi-Project Template Sample</Name>
        <Description>An example of a multi-project template</Description>
        <Icon>Icon.ico</Icon>
        <ProjectType>VisualBasic</ProjectType>
    </TemplateData>
    <TemplateContent>
        <ProjectCollection>
            <SolutionFolder Name="Math Classes">
                <ProjectTemplateLink ProjectName="MathClassLib1">
                    MathClassLib1\MyTemplate.vstemplate
                </ProjectTemplateLink>
                <ProjectTemplateLink ProjectName="MathClassLib2">
                    MathClassLib2\MyTemplate.vstemplate
                </ProjectTemplateLink>
            </SolutionFolder>
            <SolutionFolder Name="Graphics Classes">
                <ProjectTemplateLink ProjectName="GraphicsClassLib1">
                    GraphicsClassLib1\MyTemplate.vstemplate
                </ProjectTemplateLink>
                <ProjectTemplateLink ProjectName="GraphicsClassLib2">
                    GraphicsClassLib2\MyTemplate.vstemplate
                </ProjectTemplateLink>
            </SolutionFolder>
        </ProjectCollection>
    </TemplateContent>
</VSTemplate>

Příklad s odkazy na projekt

Tento příklad ukazuje, jak přidat odkazy na projekt do šablony s více projekty a je v podstatě rozšířením příkladu šablony s více projekty.

V tomto příkladu řešení obsahuje dva projekty, MultiProject.Client a MultiProject.Shared. Projekt MultiProject.Client odkazuje na MultiProject.Shared.

Struktura složek je následující:

  • MultiProjectTemplate.vstemplate
  • \MultiProject.Client\MultiProject.Client.csproj
  • \MultiProject.Client\MyTemplate.vstemplate
  • \MultiProject.Shared\MultiProject.Shared.csproj
  • \MultiProject.Shared\MyTemplate.vstemplate

Při použití šablony se část MultiProject nahrazuje názvem projektu, který uživatel zadá.

MultiProjectTemplate.vstemplate vypadá takto. Upozorňujeme, že projectTemplateLink s má atribut CopyParameters nastaven na hodnotu true a že atributy ProjectName používají proměnnou šablony $safeprojectname$.

<VSTemplate Version="2.0.0" Type="ProjectGroup"
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
...
<TemplateContent>
    <ProjectCollection>
        <ProjectTemplateLink ProjectName="$safeprojectname$.Client" CopyParameters="true">
            MultiProject.Client\MyTemplate.vstemplate
        </ProjectTemplateLink>
        <ProjectTemplateLink ProjectName="$safeprojectname$.Shared" CopyParameters="true">
            MultiProject.Shared\MyTemplate.vstemplate
        </ProjectTemplateLink>
    </ProjectCollection>
</TemplateContent>
</VSTemplate>

MultiProject.Client \MyTemplate.vstemplate může vypadat přibližně takto. Upozorňujeme, že značka Projectu má atribut ReplaceParameters nastavený na hodnotu true.

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
	...
	<TemplateContent>
		<Project TargetFileName="MultiProject.Client.csproj" File="MultiProject.Client.csproj" ReplaceParameters="true">
            ...
		</Project>
	</TemplateContent>
</VSTemplate>

MultiProject.Client \MultiProject.Client.csproj může vypadat přibližně takto. Upozorňujeme, že atribut Include of the ProjectReference používá proměnnou šablony $ext_safeprojectname$

<Project>
    ...
	<ItemGroup>
	  <ProjectReference Include="..\$ext_safeprojectname$.Shared\$ext_safeprojectname$.Shared.csproj" />
	</ItemGroup>
</Project>