※ 다중 프로젝트 템플릿을 만들기 전에, 

하나의 템플릿으로 합칠 프로젝트들을 커스텀 템플릿으로만들어 줍니다.  

(이전 글 참고 [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)하고 다시 빌드합니다.

성공적으로 빌드됐습니다.

이제 만들어진 템플릿으로 마구마구 다중 프로젝트를 생성할 수 있게 되었습니다. 

 

현재는 찾아 바꾸기로 문제를 해결하고있으나, 더 효율적인 방법이 있다면 댓글, 이메일 등으로 언제든지 알려주시기 바랍니다 :)

 

- 사용환경 : Window11, VisualStudio 2022

 

 1. 템플릿을 만들 프로젝트를 준비합니다.

 하나의 프로젝트를 진행하기전에 매번 같은 틀을 잡기위해 시간을 써야한다면 그 시간이 누구나 아깝게 느껴지실꺼라 생각합니다. 이럴때 적절하게 사용할 수 있는것이 바로 템플릿입니다. 

 저는 C# .Net Core API로 백엔드 개발을 할때 기본적으로 관리해줘야할 레이어를 라이브러리로 분리해서 관리하고있습니다. 프로젝트를 진행할때마다 위 구조를 사용하기때문에, 솔루션내의 다중 프로젝트들을 하나의 템플릿으로 묶어서 사용하고자 합니다.

 그 전에, 솔루션의 프로젝트 각각 템플릿을 만들어줘야 다음단계로 넘어갈 수 있습니다. 다중 프로젝트 템플릿 생성은 다음 게시물에서 설명하도록 하겠습니다.

 

2. 상단의 메뉴바의 프로젝트(Project) 메뉴> 템플릿 내보내기(Export Template)를 선택합니다.

 

3. 원하는 템플릿타입을 선택 후, 드롭다운에서 템플릿으로 만들 프로젝트를 지정하고 '다음'을 클릭합니다.

  • Project template : 프로젝트 전체를 템플릿으로 생성하고자 할 때 선택합니다.
  • Item template : 프로젝트 내부에 자주 사용할것 같은 아이템(.cs, .json, .xaml 등)을 작성해두고 템플릿으로 만들어 필요할때마다 불러와서(Add Item) 사용하고자 할 때 선택합니다.

 

4. 템블릿이름, 설명, 이미지 설정후 마침을 클릭합니다. 템플릿 생성을 마칠경우 

템플릿 생성을 마칠경우 C:\Users\사용자이름\Documents\Visual Studio 2022\My Exported Templates 에 템플릿이 압축된 형태로(.zip)생성됩니다. 압축을 풀지마시고 바로 사용하시면 됩니다.

 

5. 새로 프로젝트를 생성해서 템플릿이 제대로 만들어졌는지 확인합니다.

 성공적으로 만들어졌을경우 생성한 템플릿이 New 뱃지와 함께 프로젝트 템플릿 선택창에 나타납니다. 

 

- 참고

https://docs.microsoft.com/ko-kr/visualstudio/ide/how-to-create-project-templates?view=vs-2022

1. google 콘솔 회원가입

- Google Console URL : https://cloud.google.com/cloud-console/

 

Cloud Console - Web UI Admin  |  Google Cloud

Cloud Console에서 데이터 분석, VM, Datastore, 데이터베이스, 네트워킹, 개발자 서비스 등 클라우드 애플리케이션의 모든 것을 관리하세요.

cloud.google.com

 새로 가입할경우 90일동안 무료 체험할수있는 크레딧을 제공합니다. 90일 이후 체험 권한은 만료되며, 유료로 전환되지 않습니다. 90일 안에 이것저것 많이 테스트 해봅시다.

 

2. API 설정

아이디를 생성, 로그인 했다면 콘솔 검색창에 google people api를 검색후 '사용'버튼을 눌러줍니다.

왼쪽 상단의 메뉴바 선택 > API 및 서비스탭 > 사용자 인증 정보 클릭

사용자 인증 정보 만들기 클릭> API키 클릭하면 API가 자동으로 생성됩니다. 이때 생성된 API Key를 복사해둡니다.

 

 사용자 인증 정보 만들기 클릭> OAuth 클라이언트 ID 클릭

로그인 인증을 사용할 애플리케이션 유형을 선택합니다.

- 승인된 자바스크립트 원본 : 웹 애플리케이션을 호스팅하는 HTTP 원본입니다.

- 승인된 리디렉션 URI : 인증 후 리디렉션될 경로 입니다.

생성된 클라이언트 ID와 클라이언트 보안 비밀번호를 잘 저장해둡시다.

다음으로 OAuth 사용자 인증을 사용할 **테스트 사용자를 지정해 줍시다.

왼쪽 탭에서 OAuth 동의화면 선택> 차례대로 테스트 앱 관련 정보를 기입한후 '저장 후 계속'을 눌러줍니다.

범위 > 범위 추가 또는 삭제 선택 후 People API에서 사용하고자 하는 정보를 선택하여 범위를 추가합니다.

범위 선택이 완료 되었다면 '저장 후 계속'버튼을 클릭하여 테스트 사용자 단계로 넘어갑니다.

 '+ ADD USERS' 를 클릭해 테스트 환경에서 사용할 사용자(gmail user)를 추가합니다.

+ Recent posts