※ 다중 프로젝트 템플릿을 만들기 전에,
하나의 템플릿으로 합칠 프로젝트들을 커스텀 템플릿으로만들어 줍니다.
(이전 글 참고 [VisualStudio] Template 생성 1. 하나의 프로젝트를 템플릿으로 만들기)
저는 총 8개의 프로젝트가 하나의 템플릿으로 묶을것이므로, 일단 전부 각각의 템플릿으로 추출하였습니다.
1. 준비가 되었다면, 새로운 폴더를 하나 생성합니다. 이 폴더안에 미리 생성했던 템플릿 ZIP파일을 전부 풀어줄겁니다.
2. ZIP파일을 생성한 폴더에 하나씩 풀어줍니다. 이때 경로는 '새폴더 경로/프로젝트명' 으로 지정합니다.
3. vstemplate 파일 생성
정상적으로 압축이 풀렸을 경우 새폴더 내에 프로젝트명으로 된 폴더가 생성되고, 해당 폴더안에는 프로젝트 구성요소들이 위치한것을 확인할 수 있습니다.
전부 압축을 푼상태 입니다. 폴더 하나를 골라 들어가봅시다.
어느 폴더든 'MyTemplate.vstemplate'이름의 파일이 있습니다. 이것을 복사해서 상위폴더레벨(새폴더\)에 붙여넣기 합니다.
4. vstemplate 수정
붙여넣기 한 vstemplate 파일을 열어 다중프로젝트 템플릿에 맞게 수정합니다. 이제부터 이 vstemplate 파일을 '루트vstemplate'이라 명하겠습니다. 이 루트 vstemplate파일은 전체 다중 프로젝트 템플릿에 대한 파일로, 하위 vstmplate 파일을 모두 포함시킬 예정입니다.
4-1. VSTemplate 타입 수정
<VSTemplate Version="3.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<VSTemplate Version="3.0.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" >
단일 프로젝트 템플릿 Type인 Project에서 다중 프로젝트 템플릿 Type인 ProjectGroup으로 변경합니다.
4-2. TemplateData 수정
다중프로젝트의 Template Data에 적절한 정보를 기입해 수정합니다.
<TemplateData>
<Name>BaseMultiTemplate</Name>
<Description>Base MultiTemplate</Description>
<ProjectType>CSharp</ProjectType>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
- Name(필수) : 사용할 템플릿명
- Description(필수) : 템플릿 설명
- ProjectType(필수) : 프로젝트 타입
- Icon(필수) : 프로젝트 생성 시 템플릿 목록에서 보여질 아이콘
- ProjectSubType : 프로젝트 하위 타입 (https://github.com/MicrosoftDocs/visualstudio-docs.ko-kr/blob/live/docs/extensibility/projectsubtype-element-visual-studio-templates.md 참조)
- SortOrder : 프로젝트 생성시 템플릿이 보여질순서
- CreateNewFolder : 프로젝트 생성시 새로운 폴더 생성여부
- DefaultName : 프로젝트 또는 항목을 만들 때 새 시스템에서 생성되는 이름을 지정합니다.
- LocationField : 새 프로젝트 대화 상자의 위치 텍스트 상자를 프로젝트 템플릿에 대해 사용, 사용 안 함 또는 숨길지 여부를 지정 합니다.
- EnableLocationBrowseButton : 사용자가 새 프로젝트가 저장 되는 기본 디렉터리를 쉽게 수정할 수 있도록 새 프로젝트 대화 상자에서 찾아보기 단추를 사용할 수 있는지 여부를 지정 합니다.
- CreateInPlace : 프로젝트를 만들고 지정 된 위치에서 매개 변수 대체를 수행 하거나 임시 위치에서 매개 변수 대체를 수행 하 고 지정 된 위치에 프로젝트를 저장할 것인지 여부를 지정 합니다.
- Templates Data 요소(https://docs.microsoft.com/ko-kr/visualstudio/extensibility/templatedata-element-visual-studio-templates?view=vs-2022 참고)
4-3. TemplateContent 수정
※ 프로젝트명에 동일한 이름을 사용하기 위해서 변수 파일 이름을 지정할 수 있습니다.($projectname$)
참조 : https://docs.microsoft.com/ko-kr/visualstudio/ide/template-parameters?view=vs-2022
-----------예시 템플릿 구조----------
□ Base.API (Project)
□ Base.API.Models (Project)
□ Base.API.Repositories (Project)
□ Base.API.Services (Project)
■ Contracts (폴더)
└ Base.API.Contracts (Project)
■ Databases (폴더)
└ Base.API.Entities (Project)
■ Libraries (폴더)
└ Base.API.Utilites (Project)
└ Base.API.LoggerService (Project)
-----------------------------------------
제가 템플릿으로 만들고자 하는 다중프로젝트의 형태가 폴더속에도 프로젝트를 가지고 있기때문에, 해당 사항도 포함하여 템플릿을 만들어 보겠습니다.
<TemplateContent>
<ProjectCollection>
<ProjectTemplateLink ProjectName="$projectname$" CopyParameters="true">
Base.API\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.Models">
Base.API.Models\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.Repositories">
Base.API.Repositories\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.Services">
Base.API.Services\MyTemplate.vstemplate
</ProjectTemplateLink>
//============폴더생성 후 폴더안에 프로젝트 템플릿 넣기===============
//Contract 폴더안에 솔루션명.Contracts 프로젝트 생성
<SolutionFolder Name="Contracts">
<ProjectTemplateLink ProjectName="$projectname$.Contracts">
Base.API.Contracts\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
//Databases 폴더안에 솔루션명.Entities 프로젝트 생성
<SolutionFolder Name="Databases">
<ProjectTemplateLink ProjectName="$projectname$.Entities">
Base.API.Entities\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
//Libraries 폴더안에 솔루션명.Utilities, 솔루션명.LoggerService 프로젝트 생성
<SolutionFolder Name="Libraries">
<ProjectTemplateLink ProjectName="$projectname$.Utilities">
Base.API.Utilities\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.LoggerService">
Base.API.LoggerService\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
</ProjectCollection>
</TemplateContent>
이렇게, VSTemplate 작성이 끝났습니다. 아래는 VSTemplate의 전문입니다.
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
<TemplateData>
<Name>BaseMultiTemplate</Name>
<Description>Base MultiTemplate</Description>
<ProjectType>CSharp</ProjectType>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<SolutionFolder Name="Contracts">
<ProjectTemplateLink ProjectName="$projectname$.Contracts">
Base.API.Contracts\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
<SolutionFolder Name="Databases">
<ProjectTemplateLink ProjectName="$projectname$.Entities">
Base.API.Entities\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
<SolutionFolder Name="Libraries">
<ProjectTemplateLink ProjectName="$projectname$.Utilities">
Base.API.Utilities\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.LoggerService">
Base.API.LoggerService\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
<ProjectTemplateLink ProjectName="$projectname$" CopyParameters="true">
Base.API\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.Models">
Base.API.Models\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.Repositories">
Base.API.Repositories\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$projectname$.Services">
Base.API.Services\MyTemplate.vstemplate
</ProjectTemplateLink>
</ProjectCollection>
</TemplateContent>
</VSTemplate>
5. ZIP파일로 압축하기
VSTemplate작성이 완료 되었다면, 전체 파일을 묶어 ZIP파일로 압축합니다.(압축은 루트 vstemplate과 같은 레벨에서 이루어집니다.)
만들어진 압축파일의 이름을 구별 가능하게 변경하고 잘라내기(Ctrl+X)합니다.
잘라내기 한 압축파일을 C:\Users\사용자이름\Documents\Visual Studio 2022\Templates\ProjectTemplates에 붙여넣기(Ctrl+V)합니다.
6. 프로젝트 생성
자, 이제 다중 프로젝트를 생성해봅시다.
Visual Studio에서 새 프로젝트 생성을 선택할 경우, 템플릿을 선택하는 창에서 새로운 템플릿이 만들어진것을 확인할수 있습니다. 만들어진 템플릿 선택 후, 프로젝트 명을 기입해서 새 프로젝트 생성을 완료합니다.
폴더생성 프로젝트명이 공통적으로 적용이 정상적으로 이루어졌습니다.
7. 참조 프로젝트명 변경
단 여기서 문제점이 있다면, 템플릿 기준이 되었던 제 솔루션안에서 프로젝트가 각각을 참조하고 있던 상태여서, 참조 프로젝트명은 기준 프로젝트의 명에서 변경되지 않은상태이기 때문에 실제로 빌드하면 에러가 발생합니다. (따로 프로젝트를 참조하지않았다면 에러발생 없이 바로 사용가능합니다.)
이때는 Ctrl+Shift+H 단축키를 이용하여 이전 프로젝트 명을 지금 프로젝트 명으로 찾아서 변경(Find and Replace)하고 다시 빌드합니다.
성공적으로 빌드됐습니다.
이제 만들어진 템플릿으로 마구마구 다중 프로젝트를 생성할 수 있게 되었습니다.
현재는 찾아 바꾸기로 문제를 해결하고있으나, 더 효율적인 방법이 있다면 댓글, 이메일 등으로 언제든지 알려주시기 바랍니다 :)
'VisualStudio' 카테고리의 다른 글
[VisualStudio] Template 생성 1. 하나의 프로젝트를 템플릿으로 만들기 (0) | 2022.02.26 |
---|