.NET Core 전역 도구 만들기

개요 ☀

이제 첫 번째 .NET Core 전역 도구를 구축했습니다!

.NET Core 전역 도구는 컴퓨터에 전체적으로 설치된 콘솔 애플리케이션을 포함하는 특수한 NuGet 패키지입니다.

PATH 환경 변수에 추가되는 기본 디렉토리에 설치됩니다.

즉, 해당 위치를 지정하지 않고 컴퓨터의 모든 디렉터리에서 도구를 호출할 수 있습니다.

신청 🌱

그래서 전역 도구로 설치하는 일반적인 Hello World 예제보다 나에게 유용한 도구를 원했습니다.



맞춤형 참조(제 경우에는 Trello 카드 번호) 또는 YYYY-MM-DD 형식의 현재 날짜와 일반 폴더 이름이 접두어로 붙은 폴더를 생성하는 도구를 만들고 싶었습니다.

폴더를 만든 후 도구는 대부분의 프로젝트에서 유용하다고 생각되는 일부 도트 파일도 복사합니다.

예를 들어:
818_create-dotnet-tool2020-09-29_create-dotnet-tool
또한 다음 dotfile을 복사합니다.
  • .dockerignore
  • .editorconfig
  • .gitattributes
  • .gitignore
  • .prettierignore
  • .prettierrc
  • 옴니샤프.json

  • 이 코드가 어떻게 작성되었는지는 설명하지 않겠습니다. GitHub에서 source code을 보고 이것이 어떻게 수행되었는지 이해할 수 있습니다.

    주목해야 할 중요한 점은 애플리케이션이 다음과 같이 생성할 수 있는 표준 .NET Core 콘솔 애플리케이션이라는 것입니다.

    dotnet new console -n solrevdev.seedfolder
    

    메타데이터 📖

    표준 .NET Core 콘솔 애플리케이션과 전역 도구를 구분하는 것은 .csproj 파일의 몇 가지 중요한 메타데이터입니다.

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
    
        <PackAsTool>true</PackAsTool>
        <ToolCommandName>seedfolder</ToolCommandName>
        <PackageOutputPath>./nupkg</PackageOutputPath>
        <NoDefaultExcludes>true</NoDefaultExcludes>
        <Version>1.0.0</Version>
    
        <Title>solrevdev.seedfolder</Title>
        <Description>A nice description of your tool</Description>
        <PackageDescription>A nice description of your tool</PackageDescription>
        <Authors>your github username</Authors>
        <Company>your github username</Company>
        <RepositoryUrl>https://github.com/username/projectname</RepositoryUrl>
        <PackageProjectUrl>https://github.com/username/projectname</PackageProjectUrl>
        <PackageReleaseNotes>https://github.com/username/projectname</PackageReleaseNotes>
        <PackageLicenseExpression>MIT</PackageLicenseExpression>
        <RepositoryType>git</RepositoryType>
        <PackageTags>dotnetcore;;dotnet;csharp;dotnet-global-tool;dotnet-global-tools;</PackageTags>
      </PropertyGroup>
    </Project>
    
    PackAsTool에서 Version까지의 추가 태그는 필수 필드인 반면 Title에서 PackageTags는 NuGet에서 패키지를 설명하고 패키지를 검색하는 데 유용합니다.

    포장 및 설치 ⚙

    내 콘솔 응용 프로그램이 작동하는 것에 만족하면 다음 단계는 dotnet pack 명령을 실행하여 NuGet 패키지를 만드는 것입니다.

    dotnet pack
    

    이렇게 하면 nupkg 패키지가 생성됩니다. 이 nupkg NuGet 패키지는 .NET Core CLI가 전역 도구를 설치하는 데 사용하는 패키지입니다.

    따라서 여전히 테스트하는 동안 필요한 NuGet에 게시하지 않고 로컬로 패키징하고 설치하려면 다음이 필요합니다.

    dotnet pack
    dotnet tool install --global --add-source ./nupkg solrevdev.seedfolder
    

    이제 도구는 모든 폴더에서 액세스할 수 있는 경로에 있어야 합니다.

    .csproj 파일의 ToolCommandName 속성에 있던 도구를 호출합니다.

    <ToolCommandName>seedfolder</ToolCommandName>
    

    디버그하는 동안 제거 및 설치가 필요할 수 있습니다.

    제거하려면 다음과 같이 해야 합니다.

    dotnet tool uninstall -g solrevdev.seedfolder
    

    도구에 만족하고 전역적으로 설치하고 테스트한 후에는 이제 이 도구를 NuGet에 게시할 수 있습니다.

    NuGet에 게시 🚀

    NuGet으로 이동하고 create an API Key



    이 키가 있으면 GitHub 프로젝트로 이동하고 설정 및 비밀에서 방금 NuGet에서 생성한 값으로 NUGET_API_KEY라는 새 비밀을 생성합니다.



    마지막으로 코드를 확인하고 .NET Core 콘솔 애플리케이션을 NuGet 패키지로 빌드 및 패키징하는 아래와 같은 새 워크플로를 생성한 다음 방금 생성한 API 키를 사용하여 도구를 NuGet에 자동으로 게시합니다.

    커밋할 때마다 버전 태그를 범프하는 것을 잊지 마십시오. <Version>1.0.0</Version>
    name: CI
    
    on:
        push:
            branches:
                - master
                - release/*
        pull_request:
            branches:
                - master
                - release/*
    
    jobs:
        build:
            runs-on: windows-latest
    
            steps:
                - name: checkout code
                  uses: actions/checkout@v2
    
                - name: setup .net core sdk
                  uses: actions/setup-dotnet@v1
                  with:
                      dotnet-version: '3.1.x' # SDK Version to use; x will use the latest version of the 3.1 channel
    
                - name: dotnet build
                  run: dotnet build solrevdev.seedfolder.sln --configuration Release
    
                - name: dotnet pack
                  run: dotnet pack solrevdev.seedfolder.sln -c Release --no-build --include-source --include-symbols
    
                - name: setup nuget
                  if: github.event_name == 'push' && github.ref == 'refs/heads/master'
                  uses: NuGet/[email protected]
                  with:
                      nuget-version: latest
    
                - name: Publish NuGet
                  uses: rohith/[email protected]
                  with:
                    PROJECT_FILE_PATH: src/solrevdev.seedfolder.csproj # Relative to repository root
                    NUGET_KEY: $ # nuget.org API key
                    PACKAGE_NAME: solrevdev.seedfolder
    

    더 알아보기 🔍

    이제 .NET Core 전역 도구를 빌드하고 게시했으므로 영감을 얻기 위해 다른 도구를 찾을 수 있습니다.

    ".NET 도구"패키지 유형 필터를 사용하여 NuGet 웹 사이트를 검색하거나 natemcmaster/dotnet-tools GitHub 리포지토리에서 도구 목록을 참조하십시오.

    성공! 🎉

    좋은 웹페이지 즐겨찾기