Udostępnij za pośrednictwem


Tworzenie szablonów obejmujących wiele projektów

Szablony wieloprojektowe działają jako kontenery dla co najmniej dwóch projektów programu Visual Studio. Podczas tworzenia projektu opartego na szablonie wieloprojektowym każdy projekt w szablonie jest dodawany do rozwiązania.

Uwaga

Szablony omówione w tym artykule są używane podczas tworzenia projektów w programie Visual Studio, a nie tych tworzonych dotnet new .

Szablon wieloprojektowy ma co najmniej dwa szablony projektów i główny szablon typu ProjectGroup.

Szablony wieloprojektowe zachowują się inaczej niż w przypadku pojedynczych szablonów projektów. Mają one następujące unikatowe cechy:

  • Nie można przypisywać nazw poszczególnych projektów w szablonie wieloprojektowym, gdy szablon jest używany do tworzenia nowego projektu. Zamiast tego użyj atrybutu ProjectName w elemecie ProjectTemplateLink w pliku vstemplate, aby określić nazwę każdego projektu.

  • Szablony wieloprojektowe mogą zawierać projekty dla różnych języków, ale cały szablon można umieścić tylko w jednej kategorii. Określ kategorię szablonu w elemecie ProjectType pliku vstemplate.

Szablon wieloprojektowy musi zawierać następujące elementy skompresowane do pliku .zip :

  • Główny plik vstemplate dla całego szablonu wieloprojektowego. Ten plik główny vstemplate zawiera metadane wyświetlane w oknie dialogowym, w którym tworzysz nowy projekt. Określa również, gdzie znaleźć pliki vstemplate dla projektów w szablonie. Ten plik musi znajdować się w katalogu głównym pliku .zip .

  • Co najmniej dwa foldery zawierające pliki wymagane dla kompletnego szablonu projektu. Foldery zawierają wszystkie pliki kodu dla projektu, a także plik vstemplate dla projektu.

Na przykład plik .zip szablonu z wieloma projektami może zawierać następujące pliki i katalogi:

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

Plik główny vstemplate dla szablonu wieloprojektowego różni się od szablonu pojedynczego projektu w następujący sposób:

  • Atrybut Type elementu VSTemplate ma wartość ProjectGroup zamiast Project. Na przykład:

    <VSTemplate Version="2.0.0" Type="ProjectGroup"
        xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    
  • Element TemplateContent zawiera element ProjectCollection zawierający co najmniej jeden element ProjectTemplateLink definiujący ścieżki do plików vstemplate dołączonych projektów. Na przykład:

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

Napiwek

Jeśli chcesz, aby szablon wieloprojektowy był wyświetlany tylko w oknie dialogowym nowego projektu, a nie w poszczególnych projektach, które zawiera, oznacz szablony wewnętrzne jako ukryte. Na przykład:

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

Tworzenie szablonu wieloprojektowego na podstawie istniejącego rozwiązania

  1. Utwórz rozwiązanie i dodaj co najmniej dwa projekty.

  2. Dostosuj projekty, dopóki nie będą gotowe do wyeksportowania do szablonu.

    Napiwek

    Jeśli używasz parametrów szablonu i chcesz odwołać się do zmiennych z szablonu nadrzędnego, prefiks nazwy parametru za pomocą ext_polecenia . Na przykład $ext_safeprojectname$. Ponadto ustaw atrybut CopyParameters elementu ProjectTemplateLink na wartość true.

    <ProjectTemplateLink ProjectName="MyProject" CopyParameters="true">...</ProjectTemplateLink>
    
  3. W menu Projekt wybierz pozycję Eksportuj szablon.

    Zostanie otwarty Kreator eksportu szablonu.

  4. Na stronie Wybieranie typu szablonu wybierz pozycję Szablon projektu. Wybierz jeden z projektów, które chcesz wyeksportować do szablonu, a następnie wybierz pozycję Dalej. (Powtórz te kroki dla każdego projektu w rozwiązaniu).

  5. Na stronie Wybieranie opcji szablonu wprowadź nazwę i opcjonalny opis, ikonę i obraz podglądu szablonu. Wybierz pozycję Zakończ.

    Projekt jest eksportowany do pliku .zip i umieszczany w określonej lokalizacji wyjściowej.

    Uwaga

    Każdy projekt musi zostać wyeksportowany do szablonu oddzielnie, dlatego powtórz powyższe kroki dla każdego projektu w rozwiązaniu.

  6. Utwórz katalog dla szablonu z podkatalogem dla każdego projektu.

  7. Wyodrębnij zawartość pliku .zip każdego projektu do odpowiedniego utworzonego podkatalogu.

  8. W katalogu podstawowym utwórz plik XML z rozszerzeniem .vstemplate . Ten plik zawiera metadane szablonu z wieloma projektami. Zapoznaj się z poniższym przykładem struktury pliku. Pamiętaj, aby określić ścieżkę względną do pliku vstemplate każdego projektu.

  9. Zaznacz wszystkie pliki w katalogu podstawowym, a następnie z menu kontekstowego kliknij prawym przyciskiem myszy lub wybierz pozycję Wyślij do>folderu Skompresowane (spakowane).

    Pliki i foldery są kompresowane do pliku .zip .

  10. Skopiuj plik .zip do katalogu szablonu projektu użytkownika. Domyślnie ten katalog to %USERPROFILE%\Documents\Visual Studio <version>\Templates\ProjectTemplates.

  11. W programie Visual Studio wybierz pozycję Plik>nowy>projekt i sprawdź, czy szablon jest wyświetlany.

Przykład dwóch projektów

W tym przykładzie przedstawiono podstawowy plik główny vstemplate z wieloma projektami. W tym przykładzie szablon zawiera dwa projekty: Moja aplikacja systemu Windows i Moja biblioteka klas. Atrybut ProjectName w elemecie ProjectTemplateLink określa nazwę nadaną projektowi.

Napiwek

Jeśli atrybut ProjectName nie zostanie określony, nazwa pliku vstemplate jest używana jako nazwa 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>

Przykład z folderami rozwiązań

W tym przykładzie użyto elementu SolutionFolder, aby podzielić projekty na dwie grupy, klasy matematyczne i klasy graficzne. Szablon zawiera cztery projekty, z których dwa są umieszczane w każdym folderze rozwiązania.

<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>

Przykład z odwołaniami do projektu

W tym przykładzie pokazano, jak dodać odwołania do projektu do szablonu wieloprojektowego i jest to zasadniczo rozszerzenie przykładu szablonu wieloprojektowego .

W tym przykładzie rozwiązanie zawiera dwa projekty: MultiProject.Client i MultiProject.Shared. Projekt MultiProject.Client odwołuje się do MultiProject.Shared.

Struktura folderów jest następująca:

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

Gdy szablon jest używany, część MultiProject jest zastępowana nazwą projektu wprowadzana przez użytkownika.

MultiProjectTemplate.vstemplate wygląda następująco. Należy pamiętać, że atrybut CopyParameters parametrów ProjectTemplateLinkma wartość true i że atrybuty ProjectName używają zmiennej szablonu $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 może wyglądać podobnie do poniższego. Należy pamiętać, że tag Project ma atrybut ReplaceParameters ustawiony na wartość 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 może wyglądać podobnie do poniższego. Należy pamiętać, że atrybut Include of the ProjectReference używa zmiennej szablonu $ext_safeprojectname$

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