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
Utwórz rozwiązanie i dodaj co najmniej dwa projekty.
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>
W menu Projekt wybierz pozycję Eksportuj szablon.
Zostanie otwarty Kreator eksportu szablonu.
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).
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.
Utwórz katalog dla szablonu z podkatalogem dla każdego projektu.
Wyodrębnij zawartość pliku .zip każdego projektu do odpowiedniego utworzonego podkatalogu.
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.
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 .
Skopiuj plik .zip do katalogu szablonu projektu użytkownika. Domyślnie ten katalog to %USERPROFILE%\Documents\Visual Studio <version>\Templates\ProjectTemplates.
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>