VS 2019 사용자 정의 프로젝트 템 플 릿 구현 방법

선언:
'우주 최 강 IDE'개발 프로젝트 를 사용 할 때 상황 에 따라 프로젝트 템 플 릿 을 선택 하여 개발 수 요 를 만족 시 켜 야 한다.다음 과 같다.

VS 는 기본 적 인 프로젝트 템 플 릿 을 제공 합 니 다.그러나 기 존 프로젝트 템 플 릿 에는 로그 출력,감사 로그,SwaggerUI,인증 등 기본 기능 이 포함 되 어 있 지 않 습 니 다.그러면 프로젝트 템 플 릿 을 사용자 정의 하여 우리 의 수 요 를 만족 시 킬 수 있 습 니까?답 은 당연히 긍정 적 이다.
다음은 사용자 정의 프로젝트 템 플 릿 생 성 을 시작 합 니 다.
1.사용자 정의 프로젝트 템 플 릿 생 성
이번 에는 기본 기능 을 실현 한 webapi 템 플 릿 을 만 듭 니 다.
사용자 정의 프로젝트 템 플 릿 을 만 들 려 면 다음 과 같은 몇 가지 절차 가 있 습 니 다.
1.원본 항목 만 들 기(템 플 릿 항목)
WebApi 프로젝트 만 들 기:

WebApi 관련 기초 기능 실현:SwaggerUI,인증,성능 모니터링(MiniProfiler)등 기초 기능;이전 블 로그 내용 에서 구체 적 인 실현 방식 을 볼 수 있다.
2.템 플 릿 항목 의 인자 교체
이 때 템 플 릿 의 기본 기능 은 이미 실현 되 었 으 나 프로젝트 를 만 들 때 입력 한 프로젝트 이름 에 따라 이 루어 집 니 다.코드 의 네 임 스페이스,출력 프로그램 이름 등 정 보 를 설정 합 니 다.
그렇다면 어떻게 이 루어 졌 을 까?템 플 릿 매개 변수
현재 지원 하 는 내 장 된 항목 매개 변 수 는 다음 표 와 같 습 니 다.(템 플 릿 매개 변 수 는 대소 문 자 를 구분 합 니 다.)
매개 변수
설명 하 다.
clrversion
공용 언어 가 실 행 될 때(CLR)의 현재 버 전 입 니 다.
ext_*
장차  ext_  부모 템 플 릿 의 변 수 를 참조 하기 위해 접 두 사 를 모든 인자 에 추가 합 니 다. 예 를 들 어 ext_safeprojectname.
guid[1-10]
프로젝트 파일 의 프로젝트 GUID 를 바 꾸 는 데 사용 할 GUID 최대 10 개의 유일한 GUID(예:guid1)를 지정 할 수 있 습 니 다.
itemname
매개 변 수 를 사용 하 는 파일 의 이름 입 니 다.
machinename
현재 컴퓨터 이름(예:Computer 01).
projectname
프로젝트 를 만 들 때 사용자 가 제공 하 는 이름 입 니 다.
registeredorganization
HKLM\\Software\Microsoft\Windows NT\Current Version\Registered Organization 의 레 지 스 트 항목 값 입 니 다.
rootnamespace
현재 항목 의 루트 네 임 스페이스 입 니 다. 이 매개 변 수 는 템 플 릿 에 만 적 용 됩 니 다.
safeitemname
...과  itemname  같 지만 모든 안전 하지 않 은 문자 와 빈 칸 은 밑줄 로 바 뀌 었 습 니 다.
safeitemrootname
...과  safeitemname  같다
safeprojectname
사용자 가 항목 을 만 들 때 제공 하 는 이름 이지 만 이름 에서 모든 안전 하지 않 은 문자 와 빈 칸 을 삭 제 했 습 니 다.
time
DD/MM/YYYY 00:00:00 형식 으로 표 시 된 현재 시간.
specifiedsolutionname
해결 방안 의 이름. '솔 루 션 디 렉 터 리 만 들 기'를 선 택 했 을 때 specifiedsolutionname 솔 루 션 이름 이 있 습 니 다. '솔 루 션 디 렉 터 리 만 들 기'가 선택 되 지 않 았 을 때 specifiedsolutionname 비다
userdomain
현재 사용자 필드 입 니 다.
username
현재 사용자 이름 입 니 다.
webnamespace
현재 사이트 의 이름. 이 매개 변 수 는 웹 창 템 플 릿 에서 클래스 이름 을 보증 하 는 데 사 용 됩 니 다. 웹 서버 의 루트 디 렉 터 리 에 사이트 가 있다 면 이 템 플 릿 매개 변 수 는 웹 서버 의 루트 디 렉 터 리 로 분 석 됩 니 다.
year
YYYY 형식 으로 표 시 된 현재 연도.
예 를 들 어 코드 파일 의 네 임 스페이스 정 의 를 설정 합 니 다.

namespace $safeprojectname$
{
     /// <summary>
    ///   :$username$
    ///   :$time$
    ///    :$machinename$
    ///    :$projectname$
    /// </summary>
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}
코드 에 항목 이름 을 사용 해 야 할 경우$safeprocject name$를 사용 합 니 다.예:

public void ConfigureServices(IServiceCollection services)
{
    //  Swagger   ,       Swagger   
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "$safeprojectname$ API", Version = "v1" });
        // other
    });
}
VS 자체 템 플 릿 파 라 메 터 를 제외 하고 사용 자 는 템 플 릿 파 라 메 터 를 사용자 정의 할 수 있 지만 현실 적 으로 많이 사용 되 지 않 습 니 다.
3.템 플 릿 소스 항목 내 보 내기,템 플 릿 항목 설정 이름,설명,아이콘 등 내용 지정
템 플 릿 의 기본 내용 이 완성 되면 템 플 릿 내 보 내기 작업 을 할 수 있 습 니 다.절 차 는 다음 과 같 습 니 다.
A.진입 메뉴:항목->템 플 릿 내 보 내기

B.팝 업:템 플 릿 마법사 페이지 내 보 내기

C.템 플 릿 관련 정 보 를 설정 하고 완 료 를 클릭 합 니 다.템 플 릿 생 성 성공

출력 위 치 는 사용자 정의 템 플 릿 으로 저장 위 치 를 내 보 냅 니 다.
[템 플 릿 을 Visual Studio 로 자동 가 져 오기]옵션 을 선택 하면 항목 템 플 릿 을 복사 하여 특정한 폴 더 에 넣 고 다음 에 새 항목 을 만 들 면 검색 하여 사용 할 수 있 습 니 다.
4.템 플 릿 항목 에 언어,플랫폼 과 프로젝트 유형 등 태그 추가
앞의 절 차 는 템 플 릿 생 성 을 완 료 했 지만 프로젝트 를 만 들 때 프로젝트 플랫폼,언어,프로젝트 유형 라벨 에 따라 걸 러 낼 수 있 습 니 다.그러면 프로젝트 템 플 릿 라벨 을 어떻게 실현 합 니까?
다음은 3 단계 에서 생 성 된 프로젝트 템 플 릿 에 대해 연 구 를 진행 합 니 다.
템 플 릿 파일 을 여 는 압축 파일 에서 템 플 릿 파일 을 발 견 했 습 니 다.

압축 해제 후 이 파일 을 편집 하고 언어 태그(LanguageTag),플랫폼 태그(PlatformTag),프로젝트 형식 태그(ProjectTypeTag)를 추가 합 니 다.

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  <TemplateData>
    <!--    -->
    <Name>ApiTemplate</Name>
    <!--    -->
    <Description>  API  :  SwaggerUI、  、         </Description>
    <!--    -->
    <ProjectType>CSharp</ProjectType>
    <ProjectSubType>
    </ProjectSubType>
    <SortOrder>1000</SortOrder>
    <!--                  。-->
    <CreateNewFolder>true</CreateNewFolder>
    <!--    -->
    <DefaultName>ApiTemplate</DefaultName>
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
    <CreateInPlace>true</CreateInPlace>
    <!--    -->
    <LanguageTag>CSharp</LanguageTag>
    <LanguageTag>Javascript</LanguageTag>
    <!--    -->
    <PlatformTag>Windows</PlatformTag>
    <PlatformTag>Linux</PlatformTag>
    <!--    -->
    <ProjectTypeTag>Web</ProjectTypeTag>
    <!--  -->
    <Icon>__TemplateIcon.png</Icon>
    <PreviewImage>__PreviewImage.png</PreviewImage>
  </TemplateData>
  <TemplateContent>
    <Project TargetFileName="ApiProjectTemplates.csproj" File="ApiProjectTemplates.csproj" ReplaceParameters="true">
      <Folder Name="Properties" TargetFolderName="Properties">
        <ProjectItem ReplaceParameters="true" TargetFileName="launchSettings.json">launchSettings.json</ProjectItem>
      </Folder>
      <Folder Name="Controllers" TargetFolderName="Controllers">
        <ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecastController.cs">WeatherForecastController.cs</ProjectItem>
      </Folder>
      <ProjectItem ReplaceParameters="true" TargetFileName="appsettings.json">appsettings.json</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="appsettings.Development.json">appsettings.Development.json</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="JwtSetting.cs">JwtSetting.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Startup.cs">Startup.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecast.cs">WeatherForecast.cs</ProjectItem>
    </Project>
  </TemplateContent>
</VSTemplate>
다음 표 는 Visual Studio 에서 사용 할 수 있 는 태그 의 값 추출 내용 입 니 다.
언어 태그(LanguageTag)
플랫폼 태그(PlatformTag)
프로젝트 형식 태그(ProjectTypeTag)
C (cpp)
Android (android)
구름(구름)
C# (csharp)
Azure (azure)
콘 솔(console)
F# (fsharp)
iOS (ios)
데스크 톱(데스크 톱)
Java (java)
Linux (linux)
확장(확장)
JavaScript (javascript)
macOS (macos)
게임(게임)
Python (python)
tvOS (tvos)
IoT (iot)
검색 언어(querylanguage)
Windows (windows)
라 이브 러 리
TypeScript (typescript)
Xbox (xbox)
기계 학습(machinelearning)
Visual Basic (visualbasic)
 
이동(mobile)
 
 
Office (office)
 
 
기타(기타)
 
 
서비스(서비스)
 
 
테스트(test)
 
 
UWP (uwp)
 
 
Web (web)
마지막 으로 수 정 된 파일 을 zip 압축(zip 파일 이 어야 함)파일 로 압축 한 후 프로젝트 템 플 릿 이 있 는 위치 로 복사 합 니 다(%USERPROFILE%\Documents\Visual Studio 2019\Templates\\ProjectTemplates)
2.사용자 정의 프로젝트 템 플 릿 사용
이전 단계 에서 템 플 릿 생 성 이 완료 되 었 습 니 다.다음 에 템 플 릿 이 유효 하 는 지 확인 하 십시오.
프로젝트 생 성 인터페이스 에 vs 를 열 고 API 를 검색 합 니 다.다음 과 같 습 니 다.

 

이 항목 에 설 정 된 태그 와 코드 의 네 임 스페이스,설명 이 모두 유효 합 니 다.프로젝트 템 플 릿 효과 구현
3.요약:
모든 프로젝트 템 플 릿 과 템 플 릿(Visual Studio 와 함께 설치 되 었 든 만 들 었 든)은 같은 원칙 으로 작업 하고 유사 한 내용 을 가지 고 있 습 니 다.모든 템 플 릿 은 다음 항목 을 포함 합 니 다:
템 플 릿 을 사용 할 때 만 들 파일 입 니 다.이 파일 들 은 소스 코드 파일,삽입 자원,프로젝트 파일 등 을 포함한다.템 플 릿 에 따라 항목 이나 항목 을 만 들 거나'새 항목 만 들 기'페이지 나'새 항목 추가'대화 상자 에 템 플 릿 을 표시 하 는 데 필요 한 메타 데 이 터 를 포함 하 는.vstemplate 파일이 파일 들 이.zip 파일 로 압축 되 어 올 바른 폴 더 에 놓 여 있 을 때 Visual Studio 는 자동 으로 다음 위치 에 이 파일 들 을 표시 합 니 다."새 항목 만 들 기"페이지 에 항목 템 플 릿 을 표시 합 니 다."새 항목 추가"창 에 템 플 릿 을 표시 합 니 다.
프로젝트 템 플 릿 의 역할 이 매우 커서 일상 적 으로 쌓 인 기능 을 템 플 릿 에 통합 시 킬 수 있 고 프로젝트 개발 에서 바퀴 를 중복 만 드 는 것 을 피 할 수 있 으 며 개발 효율 을 높 일 수 있다.
참고 내용
  https://docs.microsoft.com/zh-cn/visualstudio/ide/creating-project-and-item-templates?view=vs-2019
  https://docs.microsoft.com/zh-cn/visualstudio/extensibility/vsix-project-template?view=vs-2019
  https://docs.microsoft.com/zh-cn/visualstudio/extensibility/vstemplate-element-visual-studio-templates?view=vs-2019
VS 2019 사용자 정의 프로젝트 템 플 릿 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 VS 2019 사용자 정의 프로젝트 템 플 릿 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기