빠른 시작: Visual Studio(.NET Framework, Windows)를 사용하여 패키지 만들기 및 게시

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

빠른 시작은 Windows 사용자만을 위한 것입니다. Mac용 Visual Studio 사용하는 경우 dotnet CLI 도구를 대신 참조하세요.

필수 조건

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

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

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

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

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

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

클래스 라이브러리 프로젝트를 만들려면 다음 단계를 수행합니다.

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

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

  3. 결과 프로젝트 템플릿 목록에서 클래스 라이브러리(.NET Framework)를 선택한 다음, 다음을 선택합니다.

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

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

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

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

    실제 NuGet 패키지 내에서 다른 사용자가 애플리케이션을 빌드할 수 있는 많은 유용한 기능을 구현할 수 있습니다. 대상 프레임워크를 설정할 수도 있습니다. 예제는 UWPXamarin을 참조하세요.

패키지의 프로젝트 속성 구성

NuGet 패키지에는 패키지 식별자, 버전 번호, 설명 등과 같은 관련 메타데이터가 포함된 매니페스트( .nuspec 파일)가 포함되어 있습니다. 이 메타데이터 중 일부는 프로젝트 속성에서 직접 그릴 수 있으므로 프로젝트와 매니페스트 모두에서 별도로 업데이트할 필요가 없습니다. 다음 단계에서는 해당 속성을 설정하는 방법을 설명합니다.

  1. 프로젝트 > 속성을 선택한 다음 애플리케이션 탭을 선택합니다.

  2. 어셈블리 이름의 경우 패키지에 고유 식별자를 지정합니다. 이미 존재하는 이름으로 패키지를 게시하려고 시도하면 오류가 표시됩니다.

    Important

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

  3. 매니페스트로 전달되는 다른 속성을 입력할 수 있는 대화 상자를 표시하는 어셈블리 정보를 선택합니다(대체 토큰 참조). 가장 일반적으로 사용되는 필드는 제목, 설명, 회사, 저작권어셈블리 버전입니다. 이러한 속성은 패키지를 게시한 후 nuget.org 같은 호스트에 패키지와 함께 표시되므로 완전히 설명적인지 확인합니다.

    Screenshot showing the Assembly Information page in a .NET Framework project in Visual Studio.

  4. (선택 사항) 속성을 직접 보고 편집하려면 프로젝트 파일 편집을 선택하여 >프로젝트에서 속성/AssemblyInfo.cs 파일을 엽니다.

  5. 이러한 속성을 설정한 후 빌드>구성 관리자의 활성 솔루션 구성릴리스설정하고 프로젝트를 다시 빌드하여 업데이트된 DLL을 생성합니다.

초기 매니페스트 생성

프로젝트 속성을 설정하고 DLL을 만든 후에는 이제 프로젝트에서 초기 .nuspec 파일을 생성할 수 있습니다. 이 단계에는 프로젝트 파일에서 정보를 가져오기 위한 관련 교체 토큰이 포함됩니다.

한 번만 실행 nuget spec 하여 초기 매니페스트를 생성합니다. 패키지를 업데이트하는 경우 프로젝트의 값을 변경하거나 매니페스트를 직접 편집합니다.

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

    명령 프롬프트가 파일이 있는 프로젝트 디렉터리에서 AppLogger.csproj 열립니다.

  2. nuget spec AppLogger.csproj 명령을 실행합니다.

    NuGet은 이 경우 AppLogger.nuspec프로젝트의 이름과 일치하는 매니페스트를 만듭니다. 매니페스트에 대체 토큰도 포함됩니다.

  3. 텍스트 편집기에서 열어 AppLogger.nuspec 다음 코드와 유사한 내용을 검사합니다.

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>Package</id>
        <version>1.0.0</version>
        <authors>Your username</authors>
        <owners>Your username</owners>
        <license type="expression">MIT</license>
        <!-- <icon>icon.png</icon> -->
        <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>Package description</description>
        <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
        <copyright>Copyright 2022</copyright>
        <tags>Tag1 Tag2</tags>
      </metadata>
    </package>
    

매니페스트 편집

  1. 계속하기 전에 다음 속성을 편집합니다. 그렇지 않은 경우 파일에 기본값 .nuspec 을 사용하여 NuGet 패키지를 만들려고 하면 오류가 발생합니다. 이러한 속성에 대한 자세한 내용은 선택적 메타데이터 요소를 참조 하세요.

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

  3. .nuspec 파일 참조에 설명된 대로 현재 매니페스트에 다른 요소를 추가할 수도 있습니다.

  4. 계속하기 전에 파일을 저장하세요.

pack 명령 실행

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

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

  2. nuget pack 명령을 실행합니다.

    NuGet은 현재 폴더의 identifier.version.nupkg 형식으로 .nupkg 파일을 생성합니다.

패키지 게시

.nupkg 파일을 만든 후 nuget.org 가져온 API 키와 함께 NuGet CLI를 사용하여 nuget.org 게시합니다. nuget.org 경우 4.1.0 이상을 사용해야 nuget.exe 합니다.

퍼블릭 갤러리를 게시하기 전에 패키지를 테스트하고 유효성을 검사하려는 경우 nuget.org 대신 int.nugettest.org 같은 테스트 환경에 업로드할 수 있습니다. int.nugettest.org 업로드된 패키지는 보존되지 않을 수 있습니다.

참고 항목

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

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

NuGet CLI를 사용하여 게시

.NET CLI를 사용하는 대신 nuget.exe(NuGet CLI) 사용은 다음과 같습니다.

  1. 명령 프롬프트를 열고 .nupkg 파일이 포함된 폴더로 변경합니다.

  2. 다음 명령을 실행합니다. 패키지 파일 이름을> 패키지의 파일 이름으로 바꾸고 api 키 값을> API 키로 바꿉<<다. 패키지 파일 이름은 패키지 ID 및 버전 번호와 .nupkg 확장명 연결입니다. 예를 들어 AppLogger.1.0.0.nupkg:

    nuget push <package filename> <api key value> -Source https://api.nuget.org/v3/index.json
    

    게시 프로세스의 결과는 다음과 같이 표시됩니다.

    Pushing <package filename> to 'https://www.nuget.org/api/v2/package'...
        PUT https://www.nuget.org/api/v2/package/
        Created https://www.nuget.org/api/v2/package/ 6829ms
    Your package was pushed.
    

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

게시 오류

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 업로드된 패키지는 보존되지 않을 수 있습니다.

다음 단계

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

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