dotnet CLI를 사용하여 NuGet 패키지 만들기

NuGet 패키지에는 개발자가 프로젝트에서 다시 사용할 수 있는 코드가 포함되어 있습니다. 코드가 어떤 작업을 수행하거나 포함하든, 명령줄 도구를 nuget.exe 사용하거나 dotnet.exeNuGet 패키지를 만듭니다.

이 문서에서는 dotnet CLI를 사용하여 패키지를 만드는 방법을 설명합니다. Visual Studio 2017부터 dotnet CLI는 모든 .NET 및 .NET Core 워크로드에 포함됩니다. dotnet CLI 또는 기타 NuGet 클라이언트 도구를 설치해야 하는 경우 NuGet 클라이언트 도구 설치를 참조 하세요.

이 항목은 .NET 및 SDK 스타일 형식사용하는 다른 프로젝트에만 적용됩니다. 이러한 프로젝트의 경우 NuGet은 프로젝트 파일의 정보를 사용하여 패키지를 만듭니다. 빠른 시작 자습서는 dotnet CLI 를 사용하여 패키지 만들기 또는 Visual Studio를 사용하여 패키지 만들기를 참조하세요.

MSBuild msbuild -t:pack 명령은 dotnet pack기능적으로 동일합니다. MSBuild를 사용하여 패키지를 만드는 방법에 대한 자세한 내용은 MSBuild를 사용하여 NuGet 패키지 만들기를 참조 하세요.

참고 항목

속성 설정

명령을 사용하여 dotnet new classlib 예제 클래스 라이브러리 프로젝트를 만들고 .dotnet packdotnet pack 명령은 다음 속성을 사용합니다. 프로젝트 파일에서 값을 지정하지 않으면 명령에서 기본값을 사용합니다.

  • PackageId패키지 식별자는 nuget.org 및 패키지를 호스트하는 다른 모든 대상에서 고유해야 합니다. 값을 지정하지 않으면 명령에서 .를 사용합니다 AssemblyName.
  • Version는 시험판 버전을 식별하는 형식 Major.Minor.Patch[-Suffix]-Suffix 의 특정 버전 번호입니다. 지정하지 않으면 기본값 1.0.0입니다.
  • Authors 는 패키지의 작성자입니다. 지정하지 않으면 기본값은 .입니다 AssemblyName.
  • Company 는 회사 정보입니다. 지정하지 않으면 기본값이 값입니다 Authors .
  • Product 는 제품 정보입니다. 지정하지 않으면 기본값은 .입니다 AssemblyName.

Visual Studio에서 프로젝트 속성에서 이러한 값을 설정할 수 있습니다. 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추클릭하고 속성을 선택한 다음 패키지 섹션을 선택합니다. 속성을 .csproj 또는 다른 프로젝트 파일에 직접 추가할 수도 있습니다.

다음 예제에서는 패키지 속성이 추가된 프로젝트 파일을 보여줍니다.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageId>UniqueID</PackageId>
    <Version>1.0.0</Version>
    <Authors>Author Name</Authors>
    <Company>Company Name</Company>
    <Product>Product Name</Product>
  </PropertyGroup>
</Project>

다른 선택적 속성(예: Title, PackageDescriptionPackageTags.)을 추가할 수 있습니다.

참고 항목

공용 사용을 위해 빌드하는 패키지의 경우 속성에 PackageTags 특히 주의해야 합니다. 태그는 다른 사용자가 패키지를 찾아서 수행하는 작업을 이해하는 데 도움이 됩니다.

dotnet pack 명령은 프로젝트 파일의 s를 PackageReference만든 패키지의 종속성으로 자동으로 변환합니다. 포함할 자산 및 PrivateAssets 태그를 제어할 IncludeAssetsExcludeAssets 수 있습니다. 자세한 내용은 종속성 자산 제어를 참조하세요.

종속성, 선택적 속성 및 버전 관리에 대한 자세한 내용은 다음을 참조하세요.

고유한 패키지 식별자 선택 및 버전 번호 설정

패키지 식별자와 버전 번호는 패키지에 포함된 정확한 코드를 고유하게 식별합니다.

다음 모범 사례를 따라 패키지 식별자를 만듭니다.

  • 식별자는 nuget.org 패키지를 호스트하는 다른 모든 위치에서 고유해야 합니다. 충돌을 방지하기 위해 회사 이름을 식별자의 첫 번째 부분으로 사용하는 것이 좋습니다.

  • 점 표기법을 사용하여 .NET 네임스페이스 같은 명명 규칙을 따릅니다. 예를 들어 Contoso-Utility-UsefulStuff 또는 Contoso_Utility_UsefulStuff 대신 Contoso.Utility.UsefulStuff를 사용합니다. 패키지 식별자를 코드에서 사용하는 네임스페이스에 일치시킬 경우 소비자에게도 유용합니다.

  • 다른 패키지를 사용하는 방법을 보여 주는 샘플 코드 패키지를 생성하는 경우 다음과 같이 Contoso.Utility.UsefulStuff.Sample식별자에 추가 .Sample 합니다.

    샘플 패키지에는 원래 패키지에 대한 종속성이 있습니다. 샘플 패키지를 만들 때 값과 함께 추가 <IncludeAssets> 합니다 contentFiles . 콘텐츠 폴더에서 \Samples\Contoso.Utility.UsefulStuff.Sample과 같은 \Samples\<identifier>라는 폴더에 샘플 코드를 정렬합니다.

패키지 버전을 설정하려면 다음 모범 사례를 따릅니다.

  • 일반적으로 꼭 필요한 것은 아니지만 프로젝트 또는 어셈블리 버전과 일치하도록 패키지 버전을 설정합니다. 패키지를 단일 어셈블리로 제한하는 경우 버전 일치가 간단합니다. NuGet 자체는 어셈블리 버전이 아닌 종속성을 확인할 때 패키지 버전을 처리합니다.

  • 비표준 버전 체계를 사용하는 경우 패키지 버전 관리에서 설명한 대로 NuGet 버전 관리 규칙을 고려해야 합니다. NuGet은 주로 의미 체계 버전 관리 2.0.0 규격입니다.

참고 항목

종속성 확인에 대한 자세한 내용은 PackageReference를 사용한 종속성 확인을 참조하세요. 버전 관리를 이해하는 데 도움이 될 수 있는 자세한 내용은 다음 일련의 블로그 게시물을 참조하세요.

설명 필드(선택 사항) 추가

패키지의 선택적 설명은 패키지 nuget.org 페이지의 추가 정보 탭에 표시됩니다. 설명은 프로젝트 파일 또는 .nuspec 파일$description설명에서 가져옵니다<Description>.

다음 예제에서는 Description .NET 패키지에 대한 .csproj 파일에 표시됩니다.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <PackageId>Azure.Storage.Blobs</PackageId>
    <Version>12.4.0</Version>
    <PackageTags>Microsoft Azure Storage Blobs;Microsoft;Azure;Blobs;Blob;Storage;StorageScalable</PackageTags>
    <Description>
      This client library enables working with the Microsoft Azure Storage Blob service for storing binary and text data.
      For this release see notes - https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/README.md and https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md
      in addition to the breaking changes https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/BreakingChanges.txt
      Microsoft Azure Storage quickstarts and tutorials - https://learn.microsoft.com/azure/storage/
      Microsoft Azure Storage REST API Reference - https://learn.microsoft.com/rest/api/storageservices/
      REST API Reference for Blob Service - https://learn.microsoft.com/rest/api/storageservices/blob-service-rest-api
    </Description>
  </PropertyGroup>
</Project>

pack 명령 실행

NuGet 패키지 또는 .nupkg 파일을 빌드하려면 프로젝트 폴더에서 dotnet pack 명령을 실행합니다. 이 명령은 프로젝트를 자동으로 빌드합니다.

dotnet pack

출력은 .nupkg 파일의 경로를 보여 줍니다.

MSBuild version 17.3.0+92e077650 for .NET
  Determining projects to restore...
  Restored D:\proj\AppLoggerNet\AppLogger\AppLogger.csproj (in 97 ms).
  Successfully created package 'D:\proj\AppLoggerNet\AppLogger\bin\Debug\AppLogger.1.0.0.nupkg'.

빌드 시 패키지를 자동으로 생성

실행할 dotnet build때마다 자동으로 실행 dotnet pack 하려면 태그의 프로젝트 파일에 <PropertyGroup> 다음 줄을 추가합니다.

<GeneratePackageOnBuild>true</GeneratePackageOnBuild>

참고 항목

패키지를 자동으로 생성하면 압축을 통해 프로젝트의 빌드 시간이 늘어나게 됩니다.

솔루션에서 실행하면 dotnet pack 압축 가능한 솔루션의 모든 프로젝트, 즉 IsPackable 속성이 설정된 모든 프로젝트가 압축됩니다 true.

패키지 설치 테스트

패키지를 게시하기 전에 프로젝트에 패키지 설치를 테스트해야 합니다. 테스트를 통해 필요한 파일이 프로젝트의 올바른 위치에 있게 됩니다.

일반 패키지 설치 프로세스를 사용하여 Visual Studio 또는 명령줄에서 수동으로 설치를 테스트합니다.

Important

  • 패키지를 만든 후에는 변경할 수 없습니다. 문제를 해결하면 패키지 내용을 변경하고 다시 압축합니다.

  • 패키지를 다시 만들면 전역 패키지 폴더를 지울 때까지 재시도는 이전 버전의 패키지를 계속 사용합니다. 폴더 지우기는 모든 빌드에서 고유한 시험판 레이블을 사용하지 않는 패키지에 특히 중요합니다.

다음 단계

패키지를 만든 후에는 원하는 호스트에 .nupkg 파일을 게시할 수 있습니다.

패키지의 기능을 확장하거나 다른 시나리오를 지원하는 방법은 다음 문서를 참조하세요.