NuGet – criando e publicando pacotes

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Hoje vamos ver como criar e publicar um pacote no NuGet, de modo que possa ser utilizado por qualquer pessoa, da mesma forma que os pacotes que estamos acostumados a utilizar, como o Autofac, o Json.net, o EntityFramework, o Owin, etc.

Primeiro passo que precisamos fazer, é criar uma conta no NuGet.org, para isso acesse a página de registro do NuGet clicando aqui para criar sua conta.

Se você já possui uma conta da Microsoft, você pode utilizá-la para se registrar no NuGet. Com a conta criada, nós temos duas opções para criar pacotes, utilizando um utilitário de linha de comando, ou um aplicativo visual. Eu particularmente prefiro utilizar o aplicativo visual, acho mais prático e simples de preencher as informações do pacote, porém, se você busca automatização, o utilitário de linha de comando é o ideal. Para baixar o utilitário de linha de comando acesse a página de downloads do NuGet. E para baixar o editor visual NuGet Package Explorer, clique aqui.

Neste post, vamos utilizar o Extender que fiz para o Redis e está disponível no GitHub em https://github.com/rdakar/StackExchange.Redis.Extender, além de também estar disponível para utilização no NuGet em https://www.nuget.org/packages/StackExchange.Redis.Extender/.

Crie uma class library, ou baixe o fonte do Extender disponibilizado acima. A forma mais rápida e direta para criar seu pacote, é criá-lo a partir do arquivo .csproj, para isso, basta executar o comando abaixo da pasta contendo o seu arquivo .csproj:

nuget pack

O NuGet irá adicionar apenas as dlls de saída do seu projeto como arquivos do pacote, porém, apesar de rápido e direto, nem sempre o resultado é aquele que queremos, essa é a desvantagem desse método. Quando isso ocorrer, você vai precisar criar um arquivo .nuspec e fornecer as especificações que deseja. O lado bom disso, é que o NuGet gera boa parte desse arquivo para nós de forma automatica.

O arquivo .nuspec contém apenas metadados descrevendo um pacote, sendo este arquivo que indica a versão, o criador, as dependências do pacote, e as informações que dizem como ele deve ser gerado. Para gerar o arquivo .nuspec a partir de uma dll, vá até a pasta da dll, e digite o comando abaixo:

nuget spec NomeDoArquivo.dll

Ela criará um arquivo bem genérico, com as informações extraídas de sua dll. Veja como fica o arquivo .nuspec para o nosso projeto:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>C:\Users\Rômulo\Development\StackExchange.Redis.Extender\bin\Release\StackExchange.Redis.Extender.dll</id>
    <version>1.0.0</version>
    <authors>Rômulo</authors>
    <owners>Rômulo</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2015</copyright>
    <tags>Tag1 Tag2</tags>
    <dependencies>
      <dependency id="SampleDependency" version="1.0" />
    </dependencies>
  </metadata>
</package>

Você pode perceber que várias informações precisam ser alteradas antes de você gerar e publicar seu pacote. Altere as informações de acordo com sua necessidade, e após isso, execute o comando abaixo:

nuget pack NomeDoArquivo.nuspec

Pronto, seu pacote está gerado e já pode ser publicado, mas antes de vermos como fazer isso, vamos ver como gerar o pacote utilizando o aplicativo visual NuGet Package Explorer. Abra o aplicativo, e  você verá quatro opções, escolha a opção “Create a new package (Ctrl+N)”. Você verá uma tela como a abaixo:

NuGet-01

Do lado esquerdo, estão os metadados do seu pacote, e do lado direito, os arquivos de seu pacote. Para adicionar arquivos, basta arrastá-los para o espaço, ou clicar com o botão direito do mouse. Você pode organizar seus arquivos da forma que desejar, inclusive podendo criar pastas para melhor organizá-los.

Por padrão, o NuGet define algumas pastas para você utilizar como padrão para seu pacote:
tools: pasta reservada para scripts PowerShell e ferramentas que deverão estar acessíveis da janela do Package Manager Console do Visual Studio.
lib: pasta para você colocar seus assemblies, sendo que todas as dlls contidas nessa pasta serão adicionadas como referência no projeto que instalar seu package.
content: todos os arquivos dessa pasta serão copiados para a raíz do projeto que instalar seu pacote no momento da instalação. O NuGet mantém sua estrutura de diretórios.
build: pasta usada para armazenar arquivos de target MSBuild.

Para alterar os metadados, basta selecionar “Edit Metadata (Ctrl+K)”, e alterar os dados que você desejar. O resultado final dessas alterações será o arquivo .nuspec, exatamente o mesmo arquivo que pode ser criado por linha de comando que vimos acima. Salve o arquivo, e será gerado um arquivo .nupkg, da mesma forma que quando usamos o utilitário de linha de comando.

Uma coisa legal, é que podemos gerar o pacote por linha de comando, e editar pelo NuGet Package Explorer (NPE), como o contrário também.

Agora vamos ver como podemos fazer para publicar nosso pacote no site do NuGet.org. Esse passo é bastante simples, e pode ser feito de duas formas, pelo próprio site, ou pelo NPE. Acesse a página de sua conta no NuGet: https://www.nuget.org/account e clique em Upload Package, você será direcionado para uma página para escolher o arquivo, e depois clique no botão Upload. Pronto, seu pacote está publicado. Para publicar pelo NPE, basta selecionar a opção “Publish (Ctrl+P) no menu, e na janela que se abrir, colocar a sua API Key, ela pode ser encontrada na página de sua conta no site do NuGet. Coloque a sua chave, e clique em publish. Pronto, seu pacote está publicado.

Fácil não é? Com isso conseguimos criar nossos pacotes e publicá-los no NuGet.org para que qualquer pessoa possa utilizá-lo.

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *