Press enter to see results or esc to cancel.

Criando seu próprio pacote NuGet

Você já aprendeu a gerenciar e a restaurar pacotes NuGet, mas até então você só esteve utilizando pacotes feitos por outras pessoas, neste terceiro post da série você irá aprender a criar seu próprio pacote. Julgo isso essencial hoje, tenho o lema de que toda biblioteca que se preze deve estar publicada em forma de NuGet. Agora você não vai mais ter desculpa pra não fazer isso.

Como quase tudo no mundo .NET, você tem duas opções de fazer isso. Manualmente usando linhas de comando, ou de uma forma um pouco mais visual, afinal, já é 2015. Eu vou mostrar as duas formas, já que eu acabo usando um misto dos dois no dia a dia.

Configurando o nuget.exe

Antes de tudo, caso você queira acompanhar o tutorial em linha de comando, você precisa baixar o utilitário de comandos do NuGet. Esta parte não é necessária para quem quer ver apenas a maneira visual.
Baixe o utilitário deste endereço, salve-o em qualquer pasta de sua preferência. Eu decidi salvar em D:\DevUtils. Também é aconselhável adicioná-lo nas variáveis de ambiente da sua máquina, vai te poupar bastante tempo.

Para fazer isso, acesse as opções do Windows digitando “variáveis” na busca. Escolha a opção “Editar as variáveis de ambiente do sistema”.
2015-01-08_00-08-57
Na janela que abrirá, clique no botão “Variáveis de Ambiente…”
2015-01-08_00-11-07
Na seção inferior “Variáveis do Sistema”, encontre a variável Path e clique duas vezes para editá-la. Agora adicione o caminho onde você acabou de baixar o NuGet.exe, prefixado por um ;. Por exemplo, no meu caso eu adicionei:

;D:\DevUtils

2015-01-08_00-14-56
Salve suas alterações clicando em Ok.

Para testar se o caminho foi adicionado corretamente, abra uma janela de comando de qualquer local e digite nuget. Você deverá ver uma série de comandos sendo impressos no terminal do console. Caso receba a mensagem “'nuget' não é reconhecido como um comando interno“, Volte e verifique se fez tudo corretamente.

Pronto, esse era o passo mais difícil. Eu prometo.

Criando seu pacote

O NuGet já tem várias maneiras de criar um pacote, tudo vai depender da sua necessidade. Para projetos simples, ele consegue criar o package direto do seu projeto ou assembly.

Utilizando linha de comando

Para criar um pacote direto do seu projeto, basta executar nuget pack na pasta onde o seu arquivo .csproj está. Ele extrairá vários metadados do seu projeto (como descrição e nome). Essa é a forma mais rápida e direta, ele adicionará apenas as dlls de saída do seu projeto como arquivos do pacote. O problema deste método é que nem sempre ele gera o que você quer.

Quando o NuGet não gera o pacote da forma como você quer, você precisa criar um arquivo .nuspec dando as especificações corretas. Mas não se preocupe, boa parte desse arquivo é gerada automaticamente pelo NuGet. Ele contém apenas metadados descrevendo o seu pacote. É este arquivo que sinaliza qual é a versão do seu pacote, quem são os criadores, quais as dependências, como seu pacote deve ser gerado, etc. Para ver uma lista completa do que pode ser definido no .nuspec visite a documentação online.

Para gerar um .nuspec a partir de uma dll, vá até a pasta onde o seu arquivo .dll está e digite o seguinte comando no cmd do Windows:

nuget spec Nome.dll

Ele criará um arquivo bem genérico com algumas informações extraídas da sua dll. Veja um exemplo do .nuspec gerado de um projeto:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>WilsonScore.dll</id>
    <version>1.0.0</version>
    <authors>Mahmoud</authors>
    <owners>Mahmoud</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ê deve ter notado que várias informações devem ser alteradas antes de você realmente gerar seu pacote. Faça isso e por fim execute o seguinte comando no cmd:

nuget pack Nome.nuspec

O NuGet vai utilizar o arquivo recém-criado para gerar seu pacote.

É importante lembrar que os pacotes gerados das duas formas anteriores já são totalmente usáveis. Você também pode pegar o código do .nuspec acima e editar somente as partes que te interessam. Na verdade, como você já deve ter notado, existem muitas maneiras de gerar um pacote, novamente, a documentação online explica uma por uma com mais detalhes.

Utilizando o NuGet Package Explorer (npe)

Para facilitar a vida de quem não quer se aventurar nas linhas de comando um grupo de pessoas criou um aplicativo que te auxilia em diversas funções, uma delas é a criação de arquivos .nuspec de forma visual. Então vamos utilizá-la a partir de agora. Baixe a última versão do aplicativo clicando aqui. Basta executar e ele será instalado.

Execute o programa recém-instalado. Logo de cara você terá que escolher entre algumas opções, como queremos criar um novo pacote, escolha Create a new package (CTRL+N). (Você pode ter notado que ele também consegue abrir pacotes baixados, daí o nome NuGet Package Explorer).

new package

Uma nova janela se abrirá, com algumas informações ao lado esquerdo e um grande espaço vazio. Este espaço vazio está só esperando você adicionar arquivos. Se você abrir um pacote já existente no npe vai notar que os arquivos aparecem nesta região. Basta arrastar e soltar todos arquivos que queira adicionar. Você também pode estruturar todos seus arquivos da forma como bem entender, inclusive utilizando pastas.

opções

O NuGet define algumas pastas padrões para que você consiga realizar diversas operações no projeto em que seu pacote será instalado:

  • tools: Pasta reservada para scripts PowerShell e ferramentas que deverão estar acessíveis da janela de Package Manager Console do Visual Studio.
  • lib: Seus assemblies (.dll). Todos os assemblies nesta pasta serão adicionados como referência no projeto instalado. Essa provavelmente é a operação mais comum que você está acostumado a ver utilizando o NuGet diariamente. Você pode definir versões diferentes das suas .dlls ou definir perfis para Portable Class Libraries. O NuGet suporta os pacotes de acordo com a convenção de profiles.
  • content: Todos arquivos dessa pasta serão copiados para a raíz do projeto instalado no momento da instalação. Lembre-se que a estrutura de diretórios é mantida, então você tem bastante poder.
  • build: Esta pasta é utilizada para armazenar arquivos de target MSBuild que serão inseridos no .csproj do projeto.

O npe também permite definir todos os metadados que seriam definidos manualmente no arquivo .nuspec. Para isso, selecione Edit > Edit metadata. Edite todos os campos como queira e selecione o ícone de Ok para salvar. Você pode salvar este arquivo e utilizá-lo sempre que queira gerar um novo pacote.

edit metadata

metadata

Quando terminar de configurar o pacote da forma como deseja, você só precisa exportá-lo, afinal, tudo que você fez até agora foi editar o arquivo .nuspecde uma maneira visual. Selecione File > Export, escolha o diretório onde irá salvar o pacote, e pronto! Você criou e customizou seu pacote.

export

No próximo e último post desta série sobre NuGet veremos como publicar seu pacote para que outros possam usá-lo.

Tweet about this on TwitterShare on FacebookShare on LinkedInEmail this to someone
Tags

Comments

Leave a Comment