페이지

Include Lists

레이블이 NuGet인 게시물을 표시합니다. 모든 게시물 표시
레이블이 NuGet인 게시물을 표시합니다. 모든 게시물 표시

2017년 3월 13일 월요일

NuGet Package Publish


 What
   - Package publish Command Line / Web page upload 

 Why
   - Nuget Package Manager를 통한 package publish 방법을 파악하기 위해


- Command line을 통한 배포 방법


1) Apikey 선언.
NuGet Package Manager Console 창에 아래의 example usage를 참고하여 개인 api를 넣어준다.


nuget setApiKey [apikey] -source https://www.nuget.org
(자신의 api번호를 입력한다.)

















성공하면 아래의 그림처럼, 성공 메시지가 보인다.



2) upload package 파일
nuget pack *.nupkg -s https://www.nuget.org
(* 을 입력해도 되고, 직접 패키지 이름을 입력해도 된다)

성공 후, nuget.org > login > 계정으로 이동 > Manage Package로 이동하여, 실제 Package가 생성되었는지 확인해 보자.
































노란색 메세지에서 처럼, 처음에는 검색이 안되므로, console 창에 나오는 명령어를 통해 설치가 가능하다.

빈 프로젝트를 하나 생성 후, Package manager Console 창에 위 명령어를 입력하여 확인하자. 


Install-Package NuGetHelloWorldPackage


위 명령을 입력한다.









위처럼 성공하는것을 확인 할 수 있다.

또한, Solution Explorer 창에 package.config 파일이 추가된것을 확일 할 수 있다.













- Web browers 를 통한 배포 방법

업로드를 하기 위해 nuget.org에서 로그인 후, 계정으로 들어가면 아래와 같은 화면이다.
















Upload a Pacakage를 선택한다.











파일을 선택 후 업로드를 한다.

그리고, 반드시 explorer를 사용하여 업로드 할 것을 권장한다.
크롬 사용시, 업로드 error가 실패할 경우 error 메시지를 리턴하지 않아서 고생을 하였다. (나오는 메시지는 timeout뿐…….. )

아래는 업로드 성공시 나오는 화면이다.






























 최종적으로 Submit 버튼을 클릭하면 Publish 된다.







이 후 과정은 command-line의 확인과 동일하다.


  추가적으로 참고할 사항으로는 package의 생성 및 배포는 자유롭다.
  대신 지우거나, gallery에서 삭제는 불가능 하다.
  업로드된 package는 모두 ms or nuget에서 담당한다 는 것이다.

  다음번에는 간단한 nuget package manager command line 명령어 사용법에 대해 알아 보자

NuGet Native C++ Package Create


 What
   - Native C++ Package 생성 방법 파악

 Why
   - Package 가 무엇인지, 어떻게 생성할 수 있는지에 대한 파악  



[먼저 이야기를 하면, 대부분의 예제는 .Net 기반의 예제로 구성되어 있다.  아래의 방법은 C++ 용 Native Package를 만들기 위한 방법임을 먼저 알린다.]

먼저 package란 무엇일까??
앞에 소개에서 간단하게 설명한것 처럼, package는 프로젝트의 정보를 가지고 있는 binary 파일이라고 할 수 있다.
프로젝트의 설정, 소스코드 등등 하나의 솔루션을 코드없이 만들어 낼 수 있는데 필요한 모든 정보를 가진것을 말한다.

앞의 boost라이브러리를 Install 할 때, 현재 나의 설정에는 아무런 변화가 없이, package.config라는 파일만 생성이 되었고, Import project라는 항목이 추가 되었는데, 라이브러리 링크 및 include 경로가 모두 설정이 되어 있었다.

패키지 파일을 만들 때, 어떤 특정 저장소에 src코드 + 라이브러리 파일을 올려놓고 다운 받는 것이 아니라, 오롯이 패키지 파일 하나만 다운 받아 이 파일을 내 설정에 맞게 빌드하여 필요한 파일들이내 환경이 import 되어 사용이 된다. 

그렇기 때문에 install-uninstall 을 하여도 내 설정에 영향을 주는것이 아니기 때문에, 깨끗한 빌드 환경을
유지 할 수 있으므로 쓰는 사람도 아주 편하다.



패키지 파일 = 프로젝트 파일 이라는 가정을 할 수 있다. 또 이렇게 생각하는것이 전반적인 과정을 이해하는데 도움이 된다.



C++ 용 native package를 만드는 과정은 아래와 같이 정리할 수 있다.


  1. Tool 설치
  2. 솔루션 생성
  3. NuGet.org 에서 개발자 key 부여 받기
  4. Package 파일 만들기
  5. 배포
  6. 확인



1. Tool 설치
Package를 만들기 위해서는 아래의 Tool 들을 설치한다.

[필수] NuGet Manager Add-in
[필수] PowerShell 3.0
   Windows 8 - Installed by default
   Windows 7 or Windows Vista - Install from http://www.microsoft.com/en-us/download/details.aspx?id=34595

[필수] NuGet 2.5 or later

   2.5 Release : https://nuget.codeplex.com/releases
   Install the Visual Studio Integration component (VSIX)

[필수] CoApp PowerShell Tools (정확히 필요한지는 모르겠음.. 설치도 제대로 이루어 지지 않음.)

    Stable 'beta' release : /files/CoApp.Tools.Powershell.msi

[옵션] NuGetCommandLine
(이게 없으면, nuget.exe파일에 대한 명시적 실행 파일 실행 경로를 설정해 줘야함..)

2. 솔루션 준비

 Package를 생성 할 솔루션을 만든다.


1 #pragma once
2
3 #include <iostream>
4 #include <stdio.h>
5
6 class SampleNativePackageApp
7 {
8 public:
9     void ShowMessage() { std::cout << "SampleNativePackage Version 1" << std::endl; }
10};



3. Nuget.org ApiKey 받기
패키지 파일을 배포하기 위해서는 Api 키가 필요하다. 
https://www.nuget.org/ 에 가입 후 

자신의 계정으로 들어간다.

그림과 같이 ApiKeys 항목에서 발급이 가능하다.


4. Package 파일 만들기(Create Package)
- 먼저 패키지를 만들기 위해서는 package에 대한 설명과 프로젝트의 설정 정보가 필요하다. 이를 포함하는것이 .autopkg 라는 파일이다. 

누겟 홈페이지에 가면, .nuspec 이라는 파일을 만들어야 한다고 한다. 그런데 아래의 문장을 보면,

.nuspec 파일은 .Net 기반의 파일을 의미한다고 추정한다.( autopkg 파일 역시 비슷한 파일이므로…)

어쨌든, c++에서 package를 만들기 위해서는 .autopkg 파일을 만들어 보자.

형식은 아래와 같으며. 각 항목에 맞게 끔 잘 정리 해 주자.
모든 과정을 설명할 수 없기 때문에, 자세한 내용은 생략하고 이 역시도 coApp-Packages라는 script 문법이 있는것 같다.
이를 참조하면 좋을 것 같다. http://coapp.org/developers/packagingbestpractices.html#autopkg

nuget {
   nuspec {
      id = HelloWorldNuGetTemplate;
      version : 0.0.0.1;
      title: HelloWorldNuGetTemplate Lib By Devman;
      authors: {Devman};
      owners: {Devman};
      requireLicenseAcceptance:false;
      summary:Template NuGet Native Package;
      description: @"This is a Devman";
      releaseNotes: "Last Release";
      copyright: Copyright (c) 2017 DevMan Corporation. All rights reserved.;
      tags: { sample, native, c++ };
   };

   files {
      include: { NuGetTemplate.h };

      // The release here works for any config that contains release
      // Examples : Release ENU,  RELEASE-ENU,  Release DEU
      [release] {
         lib:     { Release\*.lib; }
      };

      // The debug here works for any config that contains debug
      // Examples : Debug ENU,  DEBUG-ENU,  Debug DEU
      [debug] {
         lib:     { Debug\*.lib;  }
 symbols: { Debug\*.pdb; }
      };
   };
}

** 주의 사항으로, Id/version은 반드시 수정하도록 하자. 특히 id 경우 샘플이름으로 사용할 경우, upload시 중복된 이름의 package fail 이 발생하기 때문이다. **

HelloWorldNuGetTemplate.autopkg 라는 파일을 생성하고, 이를 솔루션 파일과 동일한 위치에 두자.

Tools > NuGet Package Manager > Package Manager Console 를 실행한다.

아래와 같은 실행 화면이 나오면 Write-NuGetPacakage *.autopkg 입력한다.















*.nupkg 파일이 성공적으로 생성된것을 확인 할 수 있다.
(위 그림에서 nupkg 파일이 두개 생성되었는데, 이는 autopkg 파일에 빌드 옵션 때문에 그런것이다. 1개만 생성되면 된다.)













위와 같은 방법으로 패키지 파일을 생성할 수 있다.

다음번에는 배포(Publish) 하는 방법에 대해서 알아 보겠다.


참고
- http://blog.naver.com/PostView.nhn?blogId=drvoss&logNo=20207977957
- http://debop.blogspot.kr/2012/03/nuget.html
- https://blogs.techsmith.com/inside-techsmith/nuget-packages-3/
- http://www.codeguru.com/csharp/article.php/c19247/Creating-Your-Own-NuGet-Package.htm
- https://blogs.msdn.microsoft.com/vcblog/2013/06/18/deep-dive-into-nuget-native-part-one/
- http://coapp.org/tutorials/building-a-package.html