Share via


빠른 시작: Visual Studio를 사용하여 NuGet 패키지 만들기 및 게시(Windows에만 해당)

Microsoft Visual Studio를 사용하면 .NET 클래스 라이브러리에서 NuGet 패키지를 만든 다음 CLI 도구를 사용하여 nuget.org 게시할 수 있습니다.

빠른 시작은 Windows 사용자만을 위한 것입니다. Mac용 Visual Studio 사용하는 경우 기존 라이브러리 프로젝트에서 NuGet 패키지 만들기를 참조하거나 .NET CLI사용합니다.

필수 조건

  • .NET Core 관련 워크로드를 사용하여 Windows용 Visual Studio 2022를 설치합니다.

    visualstudio.microsoft.com 2022 Community Edition을 무료로 설치하거나 Professional 또는 Enterprise 버전을 사용할 수 있습니다.

    Visual Studio 2017 이상에서는 설치할 때 NuGet 기능이 자동으로 포함됩니다. NET 관련 워크로드.

  • 아직 설치되지 않은 경우 .NET CLI를 설치합니다.

    Visual Studio 2017 이상의 경우 .NET CLI는 .NET Core 관련 워크로드와 함께 자동으로 설치됩니다. 그렇지 않으면 .NET Core SDK를 설치하여 .NET CLI를 가져옵니다. SDK 스타일 형식(SDK 특성)을 사용하는 .NET 프로젝트에는 .NET CLI가 필요합니다. Visual Studio 2017 이상의 기본 .NET 클래스 라이브러리 템플릿은 SDK 특성을 사용합니다.

    Important

    SDK 스타일이 아닌 프로젝트로 작업하는 경우 패키지를 만들고 게시하는 대신 .NET Framework 패키지 만들기 및 게시(Visual Studio)의 절차를 따릅니다. 이 문서에서는 .NET CLI를 사용하는 것이 좋습니다. NuGet CLI를 사용하여 NuGet 패키지를 게시할 수 있지만 이 문서의 일부 단계는 SDK 스타일 프로젝트 및 .NET CLI와 관련이 있습니다. NuGet CLI는 SDK 스타일이 아닌 프로젝트(일반적으로 .NET Framework)에 사용됩니다.

  • 아직 없는 경우 nuget.org에 체험 계정을 등록합니다. NuGet 패키지를 업로드하려면 먼저 계정을 등록하고 확인해야 합니다.

  • nuget.org 다운로드하여 NuGet CLI를 설치합니다. 적절한 폴더에 nuget.exe 파일을 추가하고 해당 폴더를 PATH 환경 변수에 추가합니다.

클래스 라이브러리 프로젝트 만들기

패키지하려는 코드에 기존 .NET 클래스 라이브러리 프로젝트를 사용하거나 다음과 같이 만들 수 있습니다.

  1. Visual Studio에서 파일>새로 만들기>프로젝트를 선택합니다.

  2. 새 프로젝트 만들기 창의 드롭다운 목록에서 C#, Windows라이브러리를 선택합니다.

  3. 결과 프로젝트 템플릿 목록에서 클래스 라이브러리(설명, .NET 또는 .NET Standard를 대상으로 하는 클래스 라이브러리를 만들기 위한 프로젝트)를 선택한 다음, 다음을 선택합니다.

  4. 새 프로젝트 구성 창에서 프로젝트 이름에 대한 AppLogger입력한 다음, 다음을 선택합니다.

  5. 추가 정보 창에서 적절한 프레임워크를 선택한 다음 만들기를 선택합니다.

    어떤 프레임워크를 선택할지 잘 모르는 경우 최신이 좋은 선택이며 나중에 쉽게 변경할 수 있습니다. 사용할 프레임워크에 대한 자세한 내용은 .NET 5.0 또는 .NET 6.0과 .NET Standard를 대상으로 하는 시기를 참조하세요.

  6. 프로젝트가 제대로 만들어졌도록 하려면 빌드 솔루션 빌드>를 선택합니다. DLL은 Debug(또는 해당 구성을 대신 빌드하는 경우 Release) 폴더 내에 있습니다.

  7. (선택 사항) 이 빠른 시작에서는 템플릿 클래스 라이브러리가 패키지를 만들기에 충분하기 때문에 NuGet 패키지에 대한 추가 코드를 작성할 필요가 없습니다. 그러나 패키지에 대한 몇 가지 기능 코드를 원하는 경우 다음 코드를 포함합니다.

    namespace AppLogger
    {
        public class Logger
        {
            public void Log(string text)
            {
                Console.WriteLine(text);
            }
        }
    }
    

패키지 속성 구성

프로젝트를 만든 후 다음 단계에 따라 NuGet 패키지 속성을 구성할 수 있습니다.

  1. 솔루션 탐색기 프로젝트를 선택한 다음 프로젝트 이름 속성<(프로젝트<>이름이>> 프로젝트의 이름)을 선택합니다.

  2. 패키지 노드를 확장한 다음 일반을 선택합니다.

    패키지 노드는 Visual Studio의 SDK 스타일 프로젝트에만 나타납니다. 비 SDK 스타일 프로젝트(일반적으로 .NET Framework)를 대상으로 하는 경우 프로젝트를 마이그레이션하거나 단계별 지침에 대한 .NET Framework 패키지 만들기 및 게시를 참조하세요.

    Screenshot showing NuGet package properties in a Visual Studio project.

  3. 공용으로 빌드된 패키지의 경우 태그 속성에 특히 주의하세요. 태그는 다른 사람들이 패키지를 찾고 그 기능을 이해하는 데 도움이 됩니다.

  4. 패키지에 고유한 패키지 ID 를 제공하고 원하는 다른 속성을 입력합니다. MSBuild 속성(SDK 스타일 프로젝트)이 .nuspec 파일 속성에 매핑되는 방법을 보여 주는 테이블은 팩 대상을 참조하세요. .nuspec 파일 속성에 대한 설명은 .nuspec 파일 참조를 참조하세요. 이러한 모든 속성은 Visual Studio에서 .nuspec 프로젝트에 대해 만드는 매니페스트로 이동합니다.

    Important

    nuget.org 또는 무엇이든 사용 중인 호스트에서 고유한 식별자를 패키지에 제공해야 합니다. 그렇지 않은 경우 오류가 발생합니다. 이 빠른 시작에서는 게시 단계에서 패키지를 공개적으로 표시하므로 이름에 샘플 또는 테스트를 포함하는 것이 좋습니다.

  5. (선택 사항) AppLogger.csproj 프로젝트 파일에서 속성을 직접 보려면 프로젝트>파일 편집을 선택합니다.

    AppLogger.csproj 탭이 로드됩니다.

    이 옵션은 SDK 스타일 특성을 사용하는 프로젝트에 대해 Visual Studio 2017부터 사용할 수 있습니다. 이전 Visual Studio 버전의 경우 프로젝트 파일을 편집하려면 먼저 프로젝트> 언로드를 선택해야 합니다.

pack 명령 실행

프로젝트에서 NuGet 패키지를 만들려면 다음 단계를 수행합니다.

  1. 빌드>구성 관리자를 선택한 다음 활성 솔루션 구성릴리스설정합니다.

  2. 솔루션 탐색기 AppLogger 프로젝트를 선택한 다음 Pack을 선택합니다.

    Visual Studio는 프로젝트를 빌드하고 .nupkg 파일을 만듭니다.

  3. 패키지 파일의 경로가 포함된 자세한 내용은 출력 창을 검토합니다. 이 예제에서 빌드된 어셈블리는 .NET 6.0 대상에 맞게 bin\Release\net6.0에 있습니다.

    1>------ Build started: Project: AppLogger, Configuration: Release Any CPU ------
    1>AppLogger -> d:\proj\AppLogger\AppLogger\bin\Release\net6.0\AppLogger.dll
    1>Successfully created package 'd:\proj\AppLogger\AppLogger\bin\Release\AppLogger.1.0.0.nupkg'.
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    
  4. 메뉴에 Pack 명령이 표시되지 않으면 프로젝트가 SDK 스타일 프로젝트가 아니고 NuGet CLI를 사용해야 합니다. 프로젝트를 마이그레이션하고 .NET CLI를 사용하거나 단계별 지침에 대한 .NET Framework 패키지 만들기 및 게시를 참조하세요.

(선택 사항) 빌드 시 패키지 생성

프로젝트를 빌드할 때 NuGet 패키지를 자동으로 생성하도록 Visual Studio를 구성할 수 있습니다.

  1. 솔루션 탐색기 프로젝트를 선택한 다음 프로젝트<>이름> 속성을 선택합니다. 여기서 <프로젝트 이름은> 프로젝트의 이름입니다(이 경우 AppLogger).

  2. 패키지 노드를 확장하고 일반을 선택한 다음 빌드 시 NuGet 패키지 생성을 선택합니다.

    Screenshot showing package properties with Generate NuGet package on build selected.

참고 항목

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

(선택 사항) MSBuild로 팩

메뉴 명령을 사용하는 대신 NuGet 4.x+ 및 MSBuild 15.1 이상은 프로젝트에 필요한 패키지 데이터가 포함된 경우 대상을 지원합니다pack.

  1. 프로젝트가 솔루션 탐색기 열려 있는 상태에서 도구>명령줄>개발자 명령 프롬프트를 선택하여 명령 프롬프트엽니다.

    프로젝트 디렉터리에서 명령 프롬프트가 열립니다.

  2. msbuild -t:pack 명령을 실행합니다.

자세한 내용은 MSBuild를 사용하여 패키지 만들기를 참조하세요.

패키지 게시

.nupkg 파일을 만든 후 nuget.org 가져온 API 키와 함께 .NET CLI 또는 NuGet CLI를 사용하여 nuget.org 게시합니다.

참고 항목

  • Nuget.org 바이러스에 대해 업로드된 모든 패키지를 검사하고 바이러스가 발견되면 패키지를 거부합니다. 또한 Nuget.org 나열된 모든 기존 패키지를 주기적으로 검사합니다.

  • nuget.org 게시하는 패키지는 목록에 없는 한 다른 개발자에게 공개적으로 표시됩니다. 패키지를 비공개로 호스트하려면 사용자 고유의 NuGet 피드 호스트를 참조 하세요.

API 키 얻기

NuGet 패키지를 게시하기 전에 API 키를 만듭니다.

  1. nuget.org 계정에 로그인하거나 계정이 없는 경우 계정을 만듭니다.

  2. 오른쪽 위에서 사용자 이름을 선택한 다음, API 키를 선택합니다.

  3. 만들기를 선택하고 키의 이름을 입력합니다.

  4. 범위 선택에서 푸시를 선택합니다.

  5. 패키지>선택 Glob 패턴에서 *를 입력합니다.

  6. 만들기를 실행합니다.

  7. 복사를 선택하여 새 키를 복사합니다.

    Screenshot that shows the new API key with the Copy link.

Important

  • 항상 API 키를 비밀로 유지합니다. API 키는 누구나 사용자를 대신하여 패키지를 관리할 수 있는 암호와 같습니다. 실수로 표시되는 경우 API 키를 삭제하거나 다시 생성합니다.
  • 나중에 키를 다시 복사할 수 없으므로 키를 안전한 위치에 저장합니다. API 키 페이지로 돌아갈 경우 키를 복사하려면 키를 다시 생성해야 합니다. 더 이상 패키지를 푸시하지 않으려는 경우 API 키를 제거할 수도 있습니다.

범위 지정을 사용하면 다양한 용도로 별도의 API 키를 만들 수 있습니다. 각 키에는 만료 기간이 있으며 키 범위를 특정 패키지 또는 glob 패턴으로 지정할 수 있습니다. 또한 각 키의 범위를 특정 작업( 새 패키지 및 패키지 버전 푸시, 새 패키지 버전만 푸시 또는 목록 해제)으로 지정합니다.

범위 지정을 통해 조직의 패키지를 관리하는 다른 사용자에 대한 API 키를 만들어 필요한 권한만 가질 수 있습니다.

자세한 내용은 범위가 지정된 API 키를 참조하세요.

.NET CLI 또는 NuGet CLI를 사용하여 게시

다음 CLI 도구 각각을 사용하면 패키지를 서버에 푸시하고 게시할 수 있습니다. CLI 도구의 탭(.NET CLI 또는 NuGet CLI)을 선택합니다.

NuGet CLI를 사용하는 대신 .NET CLI(dotnet.exe)를 사용하는 것이 좋습니다.

.nupkg 파일이 포함된 폴더에서 다음 명령을 실행합니다. .nupkg 파일 이름을 지정하고 키 값을 API 키로 바꿉다.

dotnet nuget push Contoso.08.28.22.001.Test.1.0.0.nupkg --api-key qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 --source https://api.nuget.org/v3/index.json

출력은 게시 프로세스의 결과를 보여줍니다.

Pushing Contoso.08.28.22.001.Test.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
  PUT https://www.nuget.org/api/v2/package/
warn : All published packages should have license information specified. Learn more: https://aka.ms/nuget/authoring-best-practices#licensing.
  Created https://www.nuget.org/api/v2/package/ 1221ms
Your package was pushed.

자세한 내용은 dotnet nuget 푸시를 참조하세요.

참고 항목

테스트 패키지가 nuget.org 라이브되지 않도록 하려면 nuget.org 테스트 사이트 https://int.nugettest.org로 푸시할 수 있습니다. int.nugettest.org 업로드된 패키지는 보존되지 않을 수 있습니다.

게시 오류

push 명령의 오류는 일반적으로 문제를 나타냅니다. 예를 들어 프로젝트에서 버전 번호를 업데이트하는 것을 잊어버렸을 수 있으므로 이미 존재하는 패키지를 게시하려고 합니다.

API 키가 잘못되었거나 만료되었거나 호스트에 이미 있는 식별자를 사용하여 패키지를 게시하려고 하면 오류가 표시됩니다. 예를 들어 식별자가 AppLogger-test 이미 nuget.org 있다고 가정합니다. 해당 식별자를 push 사용하여 패키지를 게시하려고 하면 다음 오류가 표시됩니다.

Response status code does not indicate success: 403 (The specified API key is invalid,
has expired, or does not have permission to access the specified package.).

이 오류가 발생하면 만료되지 않은 유효한 API 키를 사용하고 있음을 검사. 이 오류는 패키지 식별자가 호스트에 이미 있음을 나타냅니다. 오류를 해결하려면 패키지 식별자를 고유하게 변경하고, 프로젝트를 다시 빌드하고, .nupkg 파일을 다시 만들고, 명령을 다시 시도합니다push.

게시된 패키지 관리

패키지가 성공적으로 게시되면 확인 이메일을 받게 됩니다. 방금 게시한 패키지를 보려면 nuget.org 오른쪽 위에서 사용자 이름을 선택한 다음 패키지 관리를 선택합니다.

참고 항목

패키지를 인덱싱하고 다른 사용자가 찾을 수 있는 검색 결과에 표시하는 데 시간이 걸릴 수 있습니다. 이 시간 동안 패키지가 목록에 없는 패키지 아래에 나타나고 패키지 페이지에는 다음 메시지가 표시됩니다.

Screenshot showing the publishing message that's displayed when you upload a package to nuget.org.

이제 다른 개발자가 프로젝트에서 사용할 수 있는 nuget.org NuGet 패키지를 게시했습니다.

유용하지 않은 패키지(예: 빈 클래스 라이브러리를 사용하여 만든 이 샘플 패키지)를 만들었거나 패키지를 표시하지 않기로 결정한 경우 패키지를 목록 해제하여 검색 결과에서 숨길 수 있습니다.

  1. 패키지 관리 페이지의 게시된 패키지아래에 패키지가 표시되면 패키지 목록 옆에 있는 연필 아이콘을 선택합니다.

    Screenshot that shows the Edit icon for a package listing on nuget.org.

  2. 다음 페이지에서 목록을 선택하고 검색 결과 검사 상자에서 목록을 선택 취소한 다음 저장을 선택합니다.

    Screenshot that shows clearing the List checkbox for a package on nuget.org.

이제 패키지가 패키지 관리의 목록에 없는 패키지 아래에 표시되고 더 이상 검색 결과에 표시되지 않습니다.

참고 항목

테스트 패키지가 nuget.org 라이브로 전환되지 않도록 하려면 nuget.org 테스트 사이트 https://int.nugettest.org로 푸시할 수 있습니다. int.nugettest.org 업로드된 패키지는 보존되지 않을 수 있습니다.

추가 정보 또는 다른 파일 추가

패키지에 포함할 파일을 직접 지정하려면 프로젝트 파일을 편집하고 속성을 추가합니다 content .

<ItemGroup>
  <Content Include="readme.txt">
    <Pack>true</Pack>
    <PackagePath>\</PackagePath>
  </Content>
</ItemGroup>

이 예제에서 속성은 프로젝트 루트에 readme.txt 파일을 지정합니다. Visual Studio는 패키지를 설치한 직후 해당 파일의 내용을 일반 텍스트로 표시합니다. 추가 정보 파일은 종속성으로 설치된 패키지에 대해 표시되지 않습니다. 예를 들어 HtmlAgilityPack 패키지에 대한 추가 내용은 다음과 같습니다.

1 ----------------------------------------------------
2 ---------- Html Agility Pack Nuget Readme ----------
3 ----------------------------------------------------
4
5 ----Silverlight 4 and Windows Phone 7.1+ projects-----
6 To use XPATH features: System.Xml.Xpath.dll from the 3 Silverlight 4 SDK must be referenced. 
7 This is normally found at 
8 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client 
9 or 
10 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client
11
12 ----Silverlight 5 projects-----
13 To use XPATH features: System.Xml.Xpath.dll from the Silverlight 5 SDK must be referenced. 
14 This is normally found at 
15 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client 
16 or 
17 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client

참고 항목

프로젝트 파일의 속성에 포함하지 content 않고 프로젝트 루트에 readme.txt 추가하는 경우 패키지에 포함되지 않습니다.

Channel 9YouTube에서 더 많은 NuGet 비디오를 확인하세요.

Visual Studio .NET 클래스 라이브러리를 사용하여 NuGet 패키지를 만들게 된 것을 축하합니다. 다음 문서로 이동하여 Visual Studio .NET Framework를 사용하여 NuGet 패키지를 만드는 방법을 알아봅니다.

NuGet에서 제공해야 하는 기능을 자세히 알아보려면 다음 문서를 참조하세요.