다음을 통해 공유


NuGet

NuGet은 .NET 에코시스템의 패키지 관리자이며 개발자가 .NET 오픈 소스 라이브러리를 검색하고 획득하는 기본 방법입니다. NuGet 패키지를 호스팅하기 위해 Microsoft에서 제공하는 무료 서비스인 NuGet.org공용 NuGet 패키지의 기본 호스트이지만 MyGet 및 Azure Artifacts 같은 사용자 지정 NuGet 서비스에 게시할 수 있습니다.

NuGet

NuGet 패키지 만들기

NuGet 패키지(*.nupkg)는 .NET 어셈블리 및 관련 메타데이터를 포함하는 zip 파일입니다.

NuGet 패키지를 만드는 두 가지 주요 방법이 있습니다. 최신 및 권장 방법은 SDK 스타일 프로젝트(콘텐츠가 <Project Sdk="Microsoft.NET.Sdk">시작하는 프로젝트 파일)에서 패키지를 만드는 것입니다. 어셈블리 및 대상은 패키지에 자동으로 추가되고 나머지 메타데이터는 패키지 이름 및 버전 번호와 같은 MSBuild 파일에 추가됩니다. dotnet pack 명령을 사용하여 컴파일하면 어셈블리 대신 *.nupkg 파일이 출력됩니다.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AssemblyName>Contoso.Api</AssemblyName>
    <PackageVersion>1.1.0</PackageVersion>
    <Authors>John Doe</Authors>
  </PropertyGroup>
</Project>

NuGet 패키지를 만드는 이전 방법은 *.nuspec 파일과 nuget.exe 명령줄 도구를 사용하는 것입니다. nuspec 파일은 뛰어난 제어를 제공하지만 최종 NuGet 패키지에 포함할 어셈블리와 대상을 신중하게 지정해야 합니다. 변경을 수행할 때 실수를 하거나 누군가가 nuspec을 업데이트하는 것을 잊어버리는 것은 쉽습니다. nuspec의 장점은 SDK 스타일 프로젝트 파일을 아직 지원하지 않는 프레임워크용 NuGet 패키지를 만드는 데 사용할 수 있다는 것입니다.

✔️ SDK 스타일 프로젝트 파일을 사용하여 NuGet 패키지를 만드는 것이 좋습니다.

패키지 종속성

NuGet 패키지 종속성은 종속성 문서에서 자세히 설명합니다.

중요 NuGet 패키지 메타데이터

NuGet 패키지는 많은 메타데이터 속성을 지원합니다. 다음 표에는 NuGet.org 모든 패키지에서 제공해야 하는 핵심 메타데이터가 포함되어 있습니다.

MSBuild 속성 이름 Nuspec 이름 묘사
PackageId id 패키지 식별자입니다. 식별자의 접두사는 조건을 충족하는 경우 예약할 수 있습니다.
PackageVersion version NuGet 패키지 버전입니다. 자세한 내용은 NuGet 패키지 버전참조하세요.
Title title 패키지의 인간 친화적인 제목입니다. 기본값은 PackageId.
Description description UI에 표시되는 패키지에 대한 긴 설명입니다.
Authors authors nuget.org 프로필 이름과 일치하는 패키지 작성자의 쉼표로 구분된 목록입니다.
PackageTags tags 패키지를 설명하는 태그 및 키워드의 공백 또는 세미콜론으로 구분된 목록입니다. 태그는 패키지를 검색할 때 사용됩니다.
PackageIcon icon 패키지 아이콘으로 사용할 패키지의 이미지 경로입니다. icon 메타데이터대해 자세히 알아보세요.
PackageProjectUrl projectUrl 프로젝트 홈페이지 또는 원본 리포지토리의 URL입니다.
PackageLicenseExpression license 프로젝트 라이선스의 SPDX 식별자가. OSI 및 FSF 승인 라이선스만 식별자를 사용할 수 있습니다. 다른 라이선스는 PackageLicenseFile사용해야 합니다. license 메타데이터대해 자세히 알아보세요.

중요하다

라이선스가 없는 프로젝트는 기본적으로 독점적 저작권에 해당하므로 다른 사람이 사용할 수 없습니다.

✔️ NuGet의 접두사 예약 조건충족하는 접두사를 사용하여 NuGet 패키지 이름을 선택하는 것이 좋습니다.

✔️ 패키지 아이콘에 HTTPS href를 사용합니다.

httpS를 사용하도록 설정하고 HTTPS가 아닌 이미지를 표시하는 NuGet.org 같은 사이트에서는 혼합 콘텐츠 경고가 생성됩니다.

✔️ 최상의 보기 결과를 위해 64x64이고 투명한 배경이 있는 패키지 아이콘 이미지를 사용하세요.

✔️ 어셈블리 및 NuGet 패키지에 소스 제어 메타데이터를 추가하도록 원본 링크 설정하는 것이 좋습니다.

Source Link는 자동으로 RepositoryUrlRepositoryType 메타데이터를 NuGet 패키지에 추가합니다. 또한 Source Link는 패키지가 빌드된 정확한 소스 코드에 대한 정보를 추가합니다. 예를 들어 Git 리포지토리에서 만든 패키지에는 커밋 해시가 메타데이터로 추가됩니다.

시험판 패키지

버전 접미사가 있는 NuGet 패키지는 시험판 간주됩니다. 기본적으로 NuGet 패키지 관리자 UI는 사용자가 시험판 패키지를 옵트인하지 않는 한 안정적인 릴리스를 표시하므로 시험판 패키지가 제한된 사용자 테스트에 이상적입니다.

<PackageVersion>1.0.1-beta1</PackageVersion>

메모

안정적인 패키지는 시험판 패키지에 의존할 수 없습니다. 고유한 패키지 시험판을 만들거나 안정적인 이전 버전에 의존해야 합니다.

NuGet 시험판 패키지 종속성 NuGet 시험판 패키지 종속성

✔️ 테스트, 미리 보기 또는 실험 시 시험판 패키지를 게시하세요.

✔️ 다른 안정적인 패키지에서 참조할 수 있도록 준비되면 안정적인 패키지를 게시하세요.

기호 패키지

기호 파일(*.pdb)은 .NET 컴파일러에서 어셈블리와 함께 생성됩니다. 기호 파일은 실행 위치를 원래 소스 코드에 매핑하므로 디버거를 사용하여 실행되는 소스 코드를 단계별로 실행할 수 있습니다. NuGet은 .NET 어셈블리를 포함한 기본 패키지와 더불어 기호 파일이 들어있는 별도의 기호 패키지(*.snupkg)를 생성하는 것을 지원합니다. 기호 패키지의 개념은 기호 서버에서 호스트되며 주문형 Visual Studio와 같은 도구에서만 다운로드된다는 것입니다.

NuGet.org 자체 기호 서버 리포지토리호스트합니다. 개발자는 Visual Studio 기호 원본에 https://symbols.nuget.org/download/symbols 추가하여 NuGet.org 기호 서버에 게시된 기호를 사용할 수 있습니다.

중요하다

NuGet.org 기호 서버는 SDK 스타일 프로젝트에서 만든 새 이식 가능한 기호 파일(*.pdb)만 지원합니다.

.NET 라이브러리를 디버깅할 때 NuGet.org 기호 서버를 사용하려면 개발자에게 Visual Studio 2017 버전 15.9 이상이 있어야 합니다.

기호 패키지를 만드는 대신 기본 NuGet 패키지에 기호 파일을 포함하는 것입니다. 주 NuGet 패키지는 더 크지만 포함된 기호 파일은 개발자가 NuGet.org 기호 서버를 구성할 필요가 없다는 것을 의미합니다. SDK 스타일 프로젝트를 사용하여 NuGet 패키지를 빌드하는 경우 AllowedOutputExtensionsInPackageBuildOutputFolder 속성을 설정하여 기호 파일을 포함할 수 있습니다.

<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
    <!-- Include symbol files (*.pdb) in the built .nupkg -->
    <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
  </PropertyGroup>
</Project>

기호 파일 포함의 단점은 SDK 스타일 프로젝트를 사용하여 컴파일된 .NET 라이브러리의 경우 패키지 크기를 약 30% 증가한다는 것입니다. 패키지 크기가 중요한 경우 기호 패키지에 기호를 대신 게시해야 합니다.

✔️ 기호를 기호 패키지 (*.snupkg)로 NuGet.org에 게시하는 것을 고려하세요.

기호 패키지(*.snupkg)는 주 패키지 크기를 늘리지 않고 NuGet 패키지를 디버그하지 않으려는 개발자의 복원 성능에 영향을 주지 않고도 개발자에게 좋은 주문형 디버깅 환경을 제공합니다.

주의해야 할 점은 사용자가 IDE에서 NuGet 기호 서버를 찾아서 구성하여 기호 파일을 가져와야 할 수도 있다는 점입니다. Visual Studio 2019 버전 16.1은 NuGet.org의 기호 서버를 기본 기호 서버 목록에 추가했습니다.