다중 프로젝트 템플릿 만들기
다중 프로젝트 템플릿은 두 개 이상의 Visual Studio 프로젝트를 위한 컨테이너 역할을 합니다. 다중 프로젝트 템플릿을 기반하는 하는 프로젝트를 만들 때 템플릿의 모든 프로젝트가 솔루션에 추가됩니다.
참고 항목
이 문서에서 설명하는 템플릿은 만드는 템플릿이 아니라 dotnet new
Visual Studio에서 프로젝트를 만들 때 사용되는 템플릿입니다.
다중 프로젝트 템플릿은 ProjectGroup 형식의 루트 템플릿이 있는 2개 이상의 프로젝트 템플릿입니다.
또한 다중 프로젝트 템플릿은 단일 프로젝트 템플릿 다르게 작동합니다. 다음과 같은 고유한 특징이 있습니다.
다중 프로젝트 템플릿에 있는 개별 프로젝트는 템플릿을 사용하여 새 프로젝트를 만들 때 이름을 할당할 수 없습니다. 대신 vstemplate 파일에 있는 ProjectTemplateLink 요소의 ProjectName 특성을 사용하여 각 프로젝트의 이름을 지정합니다.
다중 프로젝트 템플릿에는 다른 언어로 작성된 프로젝트가 포함될 수 있지만 전체 템플릿 자체는 하나의 범주에만 배치될 수 있습니다. vstemplate 파일에 있는 ProjectType 요소에서 템플릿 범주를 지정합니다.
다중 프로젝트 템플릿에는 .zip 파일로 압축된 다음, 항목이 포함되어야 합니다.
전체 다중 프로젝트 템플릿에 대한 루트 vstemplate 파일입니다. 이 루트 vstemplate 파일에는 새 프로젝트를 만드는 대화 상자에 표시되는 메타데이터가 포함되어 있습니다. 또한 템플릿의 프로젝트에 대한 vstemplate 파일을 찾을 위치를 지정합니다. 이 파일은 .zip 파일의 루트에 있어야 합니다.
전체 프로젝트 템플릿에 필요한 파일이 포함된 둘 이상의 폴더입니다. 폴더에는 프로젝트에 대한 모든 코드 파일이 포함되고 프로젝트에 대한 vstemplate 파일도 포함됩니다.
예를 들어 두 개의 프로젝트가 포함된 다중 프로젝트 템플릿 .zip 파일에는 다음 파일 및 디렉터리가 있을 수 있습니다.
- MultiProjectTemplate.vstemplate
- \Project1\MyTemplate.vstemplate
- \Project1\Project1.vbproj
- \Project1\Class.vb
- \Project2\MyTemplate.vstemplate
- \Project2\Project2.vbproj
- \Project2\Class.vb
다중 프로젝트 템플릿에 대한 루트 vstemplate 파일은 다음과 같은 점에서 단일 프로젝트 템플릿과 다릅니다.
VSTemplate 요소의 Type 특성에는 Project 대신 값 ProjectGroup이 있습니다. 예시:
<VSTemplate Version="2.0.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
TemplateContent 요소에는 포함된 프로젝트의 vstemplate 파일에 대한 경로를 정의하는 ProjectTemplateLink 요소가 하나 이상 있는 ProjectCollection 요소가 포함됩니다. 예시:
<TemplateContent> <ProjectCollection> <ProjectTemplateLink> Project1\MyTemplate.vstemplate </ProjectTemplateLink> <ProjectTemplateLink> Project2\MyTemplate.vstemplate </ProjectTemplateLink> </ProjectCollection> </TemplateContent>
팁
다중 프로젝트 템플릿만 새 프로젝트 대화 상자에 표시하고 포함된 개별 프로젝트를 표시하지 않으려면 내부 템플릿을 숨김으로 표시합니다. 예시:
<VSTemplate Type="Project" ... >
<TemplateData>
...
<Hidden>true</Hidden>
</TemplateData>
...
</VSTemplate>
기존 솔루션에서 다중 프로젝트 템플릿을 만들기
솔루션을 만들고 두 개 이상의 프로젝트를 추가합니다.
서식 파일에 내보낼 준비가 될 때까지 프로젝트를 사용자 지정합니다.
팁
템플릿 매개 변수를 사용하고 부모 템플릿에서 변수를 참조하려면 매개 변수 이름 접두사를
ext_
로 지정합니다. 예들 들어$ext_safeprojectname$
입니다. 또한 ProjectTemplateLink 요소의 CopyParameters 특성을 true로 설정합니다.<ProjectTemplateLink ProjectName="MyProject" CopyParameters="true">...</ProjectTemplateLink>
프로젝트 메뉴에서 템플릿 내보내기를 선택합니다.
템플릿 내보내기 마법사가 열립니다.
템플릿 형식 선택 페이지에서 프로젝트 템플릿을 선택합니다. 템플릿으로 내보낼 프로젝트 중 하나를 선택한 후, 다음을 선택합니다. (솔루션의 각 프로젝트에 대해 이러한 단계를 반복합니다.)
템플릿 옵션 선택 페이지에서 템플릿의 이름 및 설명(옵션), 아이콘 및 미리 보기 이미지를 입력합니다. 마침을 선택합니다.
프로젝트는 .zip 파일로 내보내지고 지정된 출력 위치에 배치됩니다.
참고 항목
각 프로젝트는 템플릿에 개별적으로 내보내져야 하므로 솔루션의 각 프로젝트에 대해 위의 단계를 반복합니다.
각 프로젝트에 대한 하위 디렉터리로 템플릿에 대한 디렉터리를 만듭니다.
만든 해당 하위 디렉터리에 각 프로젝트의 .zip 파일 콘텐츠의 압축을 풉니다.
기본 디렉터리에 파일 확장명이 .vstemplate인 XML 파일을 만듭니다. 이 파일은 다중 프로젝트 템플릿에 대한 메타데이터를 포함합니다. 파일의 구조를 따르는 예제를 참조하세요. 각 프로젝트의 vstemplate 파일에 대한 상대 경로를 지정해야 합니다.
기본 디렉터리의 모든 폴더를 선택하고, 마우스 오른쪽 단추를 클릭하면 나타나는 메뉴, 즉 바로 가기 메뉴에서 보내기>압축(ZIP) 폴더를 선택합니다.
파일 및 폴더가 .zip 파일로 압축됩니다.
사용자 프로젝트 템플릿 디렉터리에 .zip 파일을 복사합니다. 기본적으로 이 디렉터리는 %USERPROFILE%\Documents\Visual Studio <버전>\Templates\ProjectTemplates입니다.
Visual Studio에서 파일>새로 만들기>프로젝트를 선택하고 템플릿이 표시되는지 확인합니다.
두 프로젝트 예제
이 예제에서는 기본 다중 프로젝트 루트 vstemplate 파일을 보여줍니다. 이 예제에서는 템플릿에 내 Windows 애플리케이션 및 내 클래스 라이브러리의 두 개 프로젝트가 있습니다. ProjectTemplateLink 요소에서 ProjectName 특성은 프로젝트에 지정된 이름을 지정합니다.
팁
ProjectName 특성을 지정하지 않으면 vstemplate 파일의 이름이 프로젝트 이름으로 사용됩니다.
<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>
솔루션 폴더의 예
이 예제에서는 SolutionFolder 요소를 사용하여 프로젝트를 Math Classes 및 Graphics Classes의 두 그룹으로 나눕니다. 이 템플릿에는 각 솔루션 폴더에 2개가 포함되는 4개의 프로젝트가 있습니다.
<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>
프로젝트 참조를 사용하는 예제
이 예제는 다중 프로젝트 템플릿에 프로젝트 참조를 추가하는 방법을 보여 주며 기본적으로 확장된 다중 프로젝트 템플릿의 예제입니다.
이 솔루션 예제에는 MultiProject.Client 및 MultiProject.Shared 두 프로젝트가 포함되어 있습니다. 프로젝트 MultiProject.Client는 MultiProject.Shared를 참조합니다.
폴더 구조는 다음과 같습니다.
- MultiProjectTemplate.vstemplate
- \MultiProject.Client\MultiProject.Client.csproj
- \MultiProject.Client\MyTemplate.vstemplate
- \MultiProject.Shared\MultiProject.Shared.csproj
- \MultiProject.Shared\MyTemplate.vstemplate
템플릿을 사용하는경우 MultiProject 부분은 사용자가 입력하는 프로젝트 이름으로 대체됩니다.
MultiProjectTemplate.vstemplate은 다음과 같습니다. ProjectTemplateLink에는 CopyParameters 특성이 true로 설정되어 있으며 ProjectName 특성은 템플릿 변수 $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은 다음과 같이 표시될 수 있습니다. 프로젝트 태그에는 ReplaceParameters 특성이 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는 다음과 같이 표시될 수 있습니다. ProjectReference의 Include 특성은 템플릿 변수 $ext_safeprojectname$을 사용합니다.
<Project>
...
<ItemGroup>
<ProjectReference Include="..\$ext_safeprojectname$.Shared\$ext_safeprojectname$.Shared.csproj" />
</ItemGroup>
</Project>