다음을 통해 공유


자습서: 항목 템플릿 만들기

.NET을 사용하면 프로젝트, 파일 및 리소스를 생성하는 템플릿을 만들고 배포할 수 있습니다. 이 자습서는 명령과 함께 dotnet new 사용할 템플릿을 만들고 설치하고 제거하는 방법을 학습하는 시리즈의 1부입니다.

완료된 템플릿은 .NET 샘플 GitHub 리포지토리에서 볼 수 있습니다.

팁 (조언)

항목 템플릿은 Visual Studio의새 항목> 대화 상자에 표시되지 않습니다.

시리즈의 이 부분에서는 다음 방법을 알아봅니다.

  • 항목 템플릿에 대한 클래스를 만듭니다.
  • 템플릿 구성 폴더 및 파일을 만듭니다.
  • 파일 경로에서 템플릿을 설치합니다.
  • 항목 템플릿을 테스트합니다.
  • 항목 템플릿을 제거합니다.

필수 조건

  • .NET 9 이상 버전.

  • 참조 문서에서는 템플릿에 대한 기본 사항과 템플릿을 결합하는 방법을 설명합니다. 이 정보 중 일부는 여기에서 반복됩니다.

  • 터미널을 열고 템플릿을 저장하고 테스트할 폴더로 이동합니다.

필요한 폴더 만들기

이 시리즈에서는 템플릿 원본이 포함된 "작업 폴더"와 템플릿을 테스트하는 데 사용되는 "테스트 폴더"를 사용합니다. 작업 폴더 및 테스트 폴더는 동일한 부모 폴더에 있어야 합니다.

먼저 부모 폴더를 만듭니다. 이름은 중요하지 않습니다. 그런 다음 작업테스트라는 두 개의 하위 폴더를 만듭니다. 작업 폴더 내에서 콘텐츠라는 하위 폴더를 만듭니다.

폴더 구조는 다음과 같습니다.

parent_folder
├───test
└───working
    └───content

항목 템플릿 만들기

항목 템플릿은 하나 이상의 파일을 포함하는 특정 형식의 템플릿입니다. 이러한 유형의 템플릿은 이미 프로젝트가 있고 구성 파일 또는 코드 파일과 같은 다른 파일을 생성하려는 경우에 유용합니다. 이 예제에서는 문자열 형식에 확장 메서드를 추가하는 클래스를 만듭니다.

터미널에서 working\content 폴더로 이동하여 확장이라는 새 하위 폴더 를 만듭니다.

working
└───content
    └───extensions

확장 폴더로 이동하고 StringExtensions.cs 새 파일을 만듭니다. 텍스트 편집기에서 파일을 엽니다. 이 클래스는 문자열의 내용을 반대로 하는 확장 Reverse 메서드를 제공합니다. 다음 코드를 붙여넣고 파일을 저장합니다.

namespace System;

public static class StringExtensions
{
    public static string Reverse(this string value)
    {
        char[] tempArray = value.ToCharArray();
        Array.Reverse(tempArray);
        return new string(tempArray);
    }
}

이제 템플릿의 콘텐츠가 완료되었으므로 템플릿 구성을 만듭니다.

템플릿 구성 만들기

자습서의 이 부분에서 템플릿 폴더는 working\content\extensions에 있습니다.

템플릿은 템플릿 폴더의 루트에 있는 특수 폴더 및 구성 파일이 있기 때문에 .NET에서 인식됩니다.

먼저 .template.config이라는 새 하위 폴더를 만들고 입력합니다. 그런 다음 template.json새 파일을 만듭니다. 폴더 구조는 다음과 같습니다.

working
└───content
    └───extensions
        └───.template.config
                template.json

즐겨 찾는 텍스트 편집기를 사용하여template.json 열고 다음 JSON 코드에 붙여넣고 저장합니다.

{
    "$schema": "http://json.schemastore.org/template",
    "author": "Me",
    "classifications": [ "Common", "Code" ],
    "identity": "ExampleTemplate.StringExtensions",
    "name": "Example templates: string extensions",
    "shortName": "stringext",
    "tags": {
      "language": "C#",
      "type": "item"
    },
    "symbols": {
      "ClassName":{
        "type": "parameter",
        "description": "The name of the code file and class.",
        "datatype": "text",
        "replaces": "StringExtensions",
        "fileRename": "StringExtensions",
        "defaultValue": "StringExtensions"
      }
    }
  }

이 구성 파일에는 템플릿에 대한 모든 설정이 포함되어 있습니다. 기본 설정(예: nameshortName)을 볼 수 있지만, 또한 tags/type 값은 item로 설정되어 있습니다. 이렇게 하면 템플릿이 "항목" 템플릿으로 분류됩니다. 만드는 템플릿 유형에는 제한이 없습니다. itemproject 값은 사용자가 찾고자 하는 템플릿 유형을 쉽게 필터링할 수 있도록 .NET에서 권장하는 일반적으로 사용되는 이름들입니다.

항목은 classifications 템플릿 목록을 실행하고 가져올 때 표시되는 dotnet new 열을 나타냅니다. 사용자는 분류 태그를 기반으로 검색할 수도 있습니다. tags 파일의 속성을 태그 목록과 classifications 혼동하지 마세요. 아쉽게도 이름이 같은 두 가지 개념입니다. template.json 파일의 전체 스키마는 JSON 스키마 저장소에서 찾을 수 있으며 template.json참조에 설명되어 있습니다. template.json 파일에 대한 자세한 내용은 dotnet templating wiki를 참조하세요.

symbols 이 JSON 개체의 부분은 템플릿에서 사용할 수 있는 매개 변수를 정의하는 데 사용됩니다. 이 경우 하나의 매개 변수가 정의되어 ClassName있습니다. 정의된 매개 변수에는 다음 설정이 포함됩니다.

  • type - 필수 설정이며 .로 parameter설정해야 합니다.
  • description - 템플릿 도움말에 인쇄되는 매개 변수에 대한 설명입니다.
  • datatype - 매개 변수를 사용할 때 매개 변수 값의 데이터 형식입니다.
  • replaces - 모든 템플릿 파일에서 매개 변수 값으로 바꿔야 하는 텍스트 값을 지정합니다.
  • fileRename - 마찬가지로 replaces모든 템플릿 파일의 이름에서 매개 변수 값으로 대체되는 텍스트 값을 지정합니다.
  • defaultValue - 사용자가 매개 변수를 지정하지 않은 경우 이 매개 변수의 기본값입니다.

템플릿을 사용하는 경우, 사용자는 ClassName 매개변수에 대한 값을 제공할 수 있으며, 이 값은 모든 StringExtensions 발생 항목을 대체합니다. 값이 제공되지 않으면 defaultValue이 사용됩니다. 이 템플릿의 경우 파일 StringExtensionsStringExtensions 클래스의 두 가지가 발생합니다. 매개 변수의 defaultValue 이름이기 StringExtensions때문에 템플릿을 사용할 때 매개 변수가 지정되지 않은 경우 파일 이름과 클래스 이름은 변경되지 않은 상태로 유지됩니다. 예를 들어 dotnet new stringext -ClassName MyExts값을 지정하면 파일 이름이 MyExts.cs 이름이 바뀌고 클래스 이름이 MyExts로 바뀝니다.

템플릿에 사용할 수 있는 매개 변수를 확인하려면 템플릿 이름과 함께 매개 변수를 사용합니다 -? .

dotnet new stringext -?

다음 출력을 생성합니다.

Example templates: string extensions (C#)
Author: Me

Usage:
  dotnet new stringext [options] [template options]

Options:
  -n, --name <name>       The name for the output being created. If no name is specified, the name of the output directory is used.
  -o, --output <output>   Location to place the generated output.
  --dry-run               Displays a summary of what would happen if the given command line were run if it would result in a template creation.
  --force                 Forces content to be generated even if it would change existing files.
  --no-update-check       Disables checking for the template package updates when instantiating a template.
  --project <project>     The project that should be used for context evaluation.
  -lang, --language <C#>  Specifies the template language to instantiate.
  --type <item>           Specifies the template type to instantiate.

Template options:
  -C, --ClassName <ClassName>  The name of the code file and class.
                               Type: text
                               Default: StringExtensions

이제 유효한 .template.config/template.json 파일이 있으므로 템플릿을 설치할 준비가 되었습니다. 터미널에서 확장 폴더로 이동하고 다음 명령을 실행하여 현재 폴더에 있는 템플릿을 설치합니다.

  • Windows에서: dotnet new install .\
  • Linux 또는 macOS에서: dotnet new install ./

이 명령은 설치된 템플릿 목록을 출력합니다. 여기에는 사용자의 템플릿이 포함되어야 합니다.

The following template packages will be installed:
   <root path>\working\content\extensions

Success: <root path>\working\content\extensions installed the following templates:
Templates                                         Short Name               Language          Tags
--------------------------------------------      -------------------      ------------      ----------------------
Example templates: string extensions              stringext                [C#]              Common/Code

항목 템플릿 테스트

이제 항목 템플릿이 설치되었으므로 테스트합니다.

  1. 테스트 폴더로 이동합니다.

  2. 새 콘솔 애플리케이션 dotnet new console을 만들어 dotnet run 명령으로 쉽게 테스트할 수 있는 작업 프로젝트를 생성합니다.

    dotnet new console
    

    다음과 유사한 출력이 표시됩니다.

    The template "Console Application" was created successfully.
    
    Processing post-creation actions...
    Running 'dotnet restore' on C:\test\test.csproj...
      Restore completed in 54.82 ms for C:\test\test.csproj.
    
    Restore succeeded.
    
  3. 다음 명령을 사용하여 프로젝트를 실행합니다.

    dotnet run
    

    다음 출력이 표시됩니다.

    Hello, World!
    
  4. 템플릿에서 dotnet new stringext 파일을 생성하려면 실행 합니다.

    dotnet new stringext
    

    다음 출력이 표시됩니다.

    The template "Example templates: string extensions" was created successfully.
    
  5. 템플릿에서 제공하는 확장 메서드를 사용하여 문자열을 "Hello, World!" 되돌리려면 Program.cs 코드를 변경합니다.

    Console.WriteLine("Hello, World!".Reverse());
    

    프로그램을 다시 실행하고 결과가 반전되는지 확인합니다.

    dotnet run
    

    다음 출력이 표시됩니다.

    !dlroW ,olleH
    

축하합니다! .NET을 사용하여 항목 템플릿을 만들고 배포했습니다. 이 자습서 시리즈의 다음 부분을 준비하기 위해 만든 템플릿을 제거합니다. 테스트 폴더의 모든 파일 및 폴더도 삭제해야 합니다. 그러면 이 자습서 시리즈의 다음 부분에 대한 준비가 완료된 상태로 돌아갑니다.

템플릿 제거

터미널에서 확장 폴더로 이동하고 다음 명령을 실행하여 현재 폴더에 있는 템플릿을 제거합니다.

  • Windows에서: dotnet new uninstall .\
  • Linux 또는 macOS에서: dotnet new uninstall ./

이 명령은 제거된 템플릿 목록을 출력합니다. 여기에는 사용자의 템플릿이 포함되어야 합니다.

Success: <root path>\working\content\extensions was uninstalled.

언제든지 설치된 템플릿 패키지 목록을 볼 수 있습니다 dotnet new uninstall . 여기에는 각 템플릿 패키지에 대한 제거 명령이 포함됩니다.

다음 단계

이 자습서에서는 항목 템플릿을 만들었습니다. 프로젝트 템플릿을 만드는 방법을 알아보려면 이 자습서 시리즈를 계속 진행합니다.