다음을 통해 공유


NuGet 클라이언트 SDK

NuGet 클라이언트 SDKNuGet 패키지 그룹을 참조합니다.

  • NuGet.Indexing - Visual Studio 클라이언트 검색 기능에 대한 NuGet의 인덱싱 라이브러리입니다.
  • NuGet.Commands - 명령줄 및 GUI NuGet 클라이언트에 공통된 명령을 완료합니다.
  • NuGet.Common - 모든 NuGet 라이브러리에 대한 일반적인 유틸리티 및 인터페이스입니다.
  • NuGet.Configuration - NuGet의 구성 설정 구현입니다.
  • NuGet.Credentials - NuGet 클라이언트의 인증 모델입니다.
  • NuGet.DependencyResolver.Core - NuGet의 PackageReference 종속성 확인자 구현입니다.
  • NuGet.Frameworks - 대상 프레임워크에 대한 NuGet의 이해
  • NuGet.LibraryModel - 종속성을 이해하기 위한 NuGet의 형식 및 인터페이스입니다.
  • NuGet.Localization - NuGet 지역화 패키지입니다.
  • NuGet.PackageManagement - Visual Studio 설치 흐름에 대한 NuGet 패키지 관리 기능입니다.
  • NuGet.Packaging - 스트림에서 파일과 .nupkg.nuspec 상호 작용할 수 있는 API 집합을 제공합니다. NuGet.Protocol 는 이 패키지에 따라 달라집니다.
  • NuGet.ProjectModel - 잠금 파일, 자산 파일 및 내부 복원 모델과 같은 PackageReference 기반 복원을 위한 NuGet의 핵심 형식 및 인터페이스입니다.
  • NuGet.Protocol - HTTP 및 파일 기반 NuGet 피드와 상호 작용하는 API 집합을 제공합니다.
  • NuGet.Resolver - packages.config 기반 프로젝트에 대한 NuGet의 종속성 확인자입니다.
  • NuGet.Versioning - 의미 체계 버전 관리의 NuGet 구현입니다.

NuGet/NuGet.Client GitHub 리포지토리에서 이러한 패키지에 대한 소스 코드를 찾을 수 있습니다.

참고 항목

NuGet 서버 프로토콜에 대한 설명서는 NuGet 서버 API참조하세요.

지원 정책

최신 버전의 NuGet 클라이언트 SDK는 완전히 지원되며 버그 수정, 업데이트 및 향상된 기능을 사용할 수 있습니다.

최신 버전의 NuGet 클라이언트 SDK 패키지를 사용하고 더 이상 사용되지 않는 NuGet 클라이언트 SDK 패키지에 대한 종속성을 프로젝트에 검사하는 것이 좋습니다.

패치 릴리스

패치된 버전의 NuGet 클라이언트 SDK는 Visual Studio 또는 .NET SDK의 장기 지원(LTS) 버전에 중요한 버그 또는 보안 수정이 필요한 경우에만 릴리스됩니다.

모든 보안 버그는 MSRC의 보고서 페이지에서 MSRC(Microsoft Security Response Center)에 보고되어야 합니다. 또한 NuGet.Client 리포지토리의 보안 정책을 참조하세요.

우리 팀의 책임은 라이브러리가 아닌 도구이기 때문에 API 안정성을 보장하지 않습니다. 자세한 내용은 NuGet.Client 리포지토리의 NuGet SDK 설명서를 참조하세요.

패키지 사용 중단

Visual Studio 또는 .NET의 LTS 버전에 연결되지 않은 지원되지 않는 NuGet 클라이언트 SDK 패키지는 nuget.org 더 이상 사용되지 않습니다.

NuGet의 패키지 기본 테넌트 접근 방식은 .NET 패키지 유지 관리(사용 중단) 지침에 부합합니다.

NuGet.Protocol

NuGet.Protocol HTTP 및 폴더 기반 NuGet 패키지 피드와 상호 작용하도록 패키지를 설치합니다.

dotnet add package NuGet.Protocol

GitHub의 NuGet.Protocol.Samples 프로젝트에서 이러한 예제의 소스 코드를 찾을 수 있습니다.

Repository.Factory 는 네임스페이 NuGet.Protocol.Core.Types 스에 정의되고 GetCoreV3 메서드는 네임스페이스에 NuGet.Protocol 정의된 확장 메서드입니다. 따라서 두 네임스페이스에 대한 문을 추가 using 해야 합니다.

패키지 버전 나열

NuGet V3 패키지 콘텐츠 API를 사용하여 Newtonsoft.Json의 모든 버전을 찾습니다.

ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;

SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
FindPackageByIdResource resource = await repository.GetResourceAsync<FindPackageByIdResource>();

IEnumerable<NuGetVersion> versions = await resource.GetAllVersionsAsync(
    "Newtonsoft.Json",
    cache,
    logger,
    cancellationToken);

foreach (NuGetVersion version in versions)
{
    Console.WriteLine($"Found version {version}");
}

패키지 다운로드

NuGet V3 패키지 콘텐츠 API를 사용하여 Newtonsoft.Json v12.0.1을 다운로드합니다.

ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;

SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
FindPackageByIdResource resource = await repository.GetResourceAsync<FindPackageByIdResource>();

string packageId = "Newtonsoft.Json";
NuGetVersion packageVersion = new NuGetVersion("12.0.1");
using MemoryStream packageStream = new MemoryStream();

await resource.CopyNupkgToStreamAsync(
    packageId,
    packageVersion,
    packageStream,
    cache,
    logger,
    cancellationToken);

Console.WriteLine($"Downloaded package {packageId} {packageVersion}");

using PackageArchiveReader packageReader = new PackageArchiveReader(packageStream);
NuspecReader nuspecReader = await packageReader.GetNuspecReaderAsync(cancellationToken);

Console.WriteLine($"Tags: {nuspecReader.GetTags()}");
Console.WriteLine($"Description: {nuspecReader.GetDescription()}");

패키지 메타데이터 가져오기

NuGet V3 패키지 메타데이터 API를 사용하여 "Newtonsoft.Json" 패키지에 대한 메타데이터를 가져옵니다.

ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;

SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageMetadataResource resource = await repository.GetResourceAsync<PackageMetadataResource>();

IEnumerable<IPackageSearchMetadata> packages = await resource.GetMetadataAsync(
    "Newtonsoft.Json",
    includePrerelease: true,
    includeUnlisted: false,
    cache,
    logger,
    cancellationToken);

foreach (IPackageSearchMetadata package in packages)
{
    Console.WriteLine($"Version: {package.Identity.Version}");
    Console.WriteLine($"Listed: {package.IsListed}");
    Console.WriteLine($"Tags: {package.Tags}");
    Console.WriteLine($"Description: {package.Description}");
}

패키지 검색

NuGet V3 Search API사용하여 "json" 패키지를 검색합니다.

ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;

SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageSearchResource resource = await repository.GetResourceAsync<PackageSearchResource>();
SearchFilter searchFilter = new SearchFilter(includePrerelease: true);

IEnumerable<IPackageSearchMetadata> results = await resource.SearchAsync(
    "json",
    searchFilter,
    skip: 0,
    take: 20,
    logger,
    cancellationToken);

foreach (IPackageSearchMetadata result in results)
{
    Console.WriteLine($"Found package {result.Identity.Id} {result.Identity.Version}");
}

패키지 푸시

NuGet V3 푸시 및 삭제 API사용하여 패키지를 푸시합니다.

ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;

SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageUpdateResource resource = await repository.GetResourceAsync<PackageUpdateResource>();

string apiKey = "my-api-key";

await resource.Push(
    "MyPackage.nupkg",
    symbolSource: null,
    timeoutInSecond: 5 * 60,
    disableBuffering: false,
    getApiKey: packageSource => apiKey,
    getSymbolApiKey: packageSource => null,
    noServiceEndpoint: false,
    skipDuplicate: false,
    symbolPackageUpdateResource: null,
    logger);

패키지 삭제

NuGet V3 푸시 및 삭제 API사용하여 패키지를 삭제합니다.

참고 항목

NuGet 서버는 패키지 삭제 요청을 "하드 삭제", "일시 삭제" 또는 "목록 해제"로 자유롭게 해석할 수 있습니다. 예를 들어 nuget.org 패키지 삭제 요청을 "unlist"로 해석합니다. 이 방법에 대한 자세한 내용은 패키지 삭제 정책을 참조 하세요 .

ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;

SourceCacheContext cache = new SourceCacheContext();
SourceRepository repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
PackageUpdateResource resource = await repository.GetResourceAsync<PackageUpdateResource>();

string apiKey = "my-api-key";

await resource.Delete(
    "MyPackage",
    "1.0.0-beta",
    getApiKey: packageSource => apiKey,
    confirm: packageSource => true,
    noServiceEndpoint: false,
    logger);

인증된 피드 작업

인증된 피드를 사용하는 데 사용합니다 NuGet.Protocol .

ILogger logger = NullLogger.Instance;
CancellationToken cancellationToken = CancellationToken.None;
SourceCacheContext cache = new SourceCacheContext();
var sourceUri = "https://contoso.privatefeed/v3/index.json";
var packageSource = new PackageSource(sourceUri)
{
    Credentials = new PackageSourceCredential(
        source: sourceUri,
        username: "myUsername",
        passwordText: "myVerySecretPassword",
        isPasswordClearText: true,
        validAuthenticationTypesText: null)
};
// If the `SourceRepository` is created with a `PackageSource`, the rest of APIs will consume the credentials attached to `PackageSource.Credentials`.
SourceRepository repository = Repository.Factory.GetCoreV3(packageSource);
PackageMetadataResource resource = await repository.GetResourceAsync<PackageMetadataResource>();

IEnumerable<IPackageSearchMetadata> packages = await resource.GetMetadataAsync(
    "MyPackage",
    includePrerelease: true,
    includeUnlisted: false,
    cache,
    logger,
    cancellationToken);

foreach (IPackageSearchMetadata package in packages)
{
    Console.WriteLine($"Version: {package.Identity.Version}");
    Console.WriteLine($"Listed: {package.IsListed}");
    Console.WriteLine($"Tags: {package.Tags}");
    Console.WriteLine($"Description: {package.Description}");
}

NuGet.Packaging

스트림에서 NuGet.Packaging 파일과 .nupkg.nuspec 상호 작용할 패키지를 설치합니다.

dotnet add package NuGet.Packaging

패키지 만들기

패키지를 만들고, 메타데이터를 설정하고, .를 사용하여 NuGet.Packaging종속성을 추가합니다.

Important

NuGet 패키지는 이 하위 수준 API를 사용하지 않고 공식 NuGet 도구를 사용하여 만드는 것이 좋습니다. 잘 구성된 패키지에 중요한 다양한 특성이 있으며 최신 버전의 도구는 이러한 모범 사례를 통합하는 데 도움이 됩니다.

NuGet 패키지를 만드는 방법에 대한 자세한 내용은 패키지 만들기 워크플로 개요 및 공식 팩 도구 설명서(예: dotnet CLI 사용)를 참조하세요.

PackageBuilder builder = new PackageBuilder();
builder.Id = "MyPackage";
builder.Version = new NuGetVersion("1.0.0-beta");
builder.Description = "My package created from the API.";
builder.Authors.Add("Sample author");
builder.DependencyGroups.Add(new PackageDependencyGroup(
    targetFramework: NuGetFramework.Parse("netstandard1.4"),
    packages: new[]
    {
        new PackageDependency("Newtonsoft.Json", VersionRange.Parse("10.0.1"))
    }));

using FileStream outputStream = new FileStream("MyPackage.nupkg", FileMode.Create);
builder.Save(outputStream);
Console.WriteLine($"Saved a package to {outputStream.Name}");

패키지 읽기

를 사용하여 NuGet.Packaging파일 스트림에서 패키지를 읽습니다.

using FileStream inputStream = new FileStream("MyPackage.nupkg", FileMode.Open);
using PackageArchiveReader reader = new PackageArchiveReader(inputStream);
NuspecReader nuspec = reader.NuspecReader;
Console.WriteLine($"ID: {nuspec.GetId()}");
Console.WriteLine($"Version: {nuspec.GetVersion()}");
Console.WriteLine($"Description: {nuspec.GetDescription()}");
Console.WriteLine($"Authors: {nuspec.GetAuthors()}");

Console.WriteLine("Dependencies:");
foreach (var dependencyGroup in nuspec.GetDependencyGroups())
{
    Console.WriteLine($" - {dependencyGroup.TargetFramework.GetShortFolderName()}");
    foreach (var dependency in dependencyGroup.Packages)
    {
        Console.WriteLine($"   > {dependency.Id} {dependency.VersionRange}");
    }
}

Console.WriteLine("Files:");
foreach (var file in reader.GetFiles())
{
    Console.WriteLine($" - {file}");
}

타사 설명서

2016년에 게시된 Dave Glick의 다음 블로그 시리즈에서 일부 API에 대한 예제 및 설명서를 찾을 수 있습니다.

참고 항목

이러한 블로그 게시물은 NuGet 클라이언트 SDK 패키지의 3.4.3 버전이 릴리스된 직후 작성되었습니다. 최신 버전의 패키지는 블로그 게시물의 정보와 호환되지 않을 수 있습니다.

Martin Björkström은 Dave Glick의 블로그 시리즈에 대한 후속 블로그 게시물을 통해 NuGet 클라이언트 SDK를 사용하여 NuGet 패키지를 설치하는 다른 방법을 소개합니다.