{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
18/01/2011
Ok eu falei bastante sobre o NuGet, sobre seus comandos, sobre a NuGet Gallery e dei até uma palestra sobre ele(NuGet). Mas como é que criamos um pacote para ele?
Criar pacotes para o NuGet é realmente bastante simples, tudo que precisamos é criar um XML(Oh Deus, um XML?).Este XML é um descritivo do pacote, informa a versão, quais arquivos formam o pacote, descrição, dependências etc. É um XML bastante simples, e não é preciso ficar modificando constantemente, então é tranquilo.Este arquivo deve ser salvo com a extensão .nuspec, ou seja, é uma especificação do pacote que será criado.Vamos dar uma olhada em um XML destes:
<?xml version="1.0"?>
<package>
<metadata>
<id>...project name here...</id>
<version>...version here...</version>
<authors>...your name here...</authors>
<licenseUrl>...license url here...</licenseUrl>
<projectUrl>...project url here...</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>...description here...</description>
<summary>...summary here...</summary>
<language>...language here...</language>
</metadata>
</package>Este é o arquivo mais simples que podemos criar. Não preciso comentar muito sobre cada um dos campos, acho que estão bem explicados. Caso exista alguma dúvida, confira aqui o que é, para que serve e quais campos são obrigatórios: http://nuget.codeplex.com/documentation?title=Nuspec%20Format.
Para demonstrar a criação de um pacote, vou utilizar um projeto open source que estou desenvolvendo chamado MVCTestsEx. Este projeto consiste em uma biblioteca com alguns helpers que facilitam a criação de testes de unidade para ASP.NET MVC. O fonte da biblioteca está aqui: http://github.com/vquaiato/MVCTestsEx.O arquivo ficou assim:
<?xml version="1.0"?>
<package>
<metadata>
<id>MVCTestsEx</id>
<version></version>
<authors>Vinicius Quaiato</authors>
<licenseUrl>http://github.com/vquaiato/MVCTestsEx</licenseUrl>
<projectUrl>http://github.com/vquaiato/MVCTestsEx</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>The MVCTestsEx library consists in a set of helpers that let you easily write ASP.NET MVC unit tests.</description>
<summary>They help you in ViewName assertions, model assertions, and so on.</summary>
<language>en-US</language>
<dependencies>
<dependency id="nunit" />
</dependencies>
</metadata>
<files>
<file src="\bin\MVCTestsEx.dll" target="lib" />
</files>
</package>Meu projeto possui uma dependência do projeto NUnit, então informamos isso no arquivo de especificação do pacote linhas 13 a 15. Desta forma quando nosso pacote for instalado o NuGet perceberá que precisa realizar a instalação do NUnit também.A seção files linhas 17 a 19 indicam quais os arquivo que fazem parte do nosso pacote. Neste caso estão informando que é para empacotar o arquivo MVCTestsEx.dll que se encontra na pasta bin e informamos que deve ser colocado em lib.Se quiséssemos que este arquivo ficasse em algum diretório na aplicação client poderíamos especificar isso, veja aqui: http://nuget.codeplex.com/wikipage?title=File%20Element%20Specification.
Para gerarmos o pacote batsa executar um comando apontando para o arquivo .nuspec. Este comando é executado através do NuGet Command Line, que deve ser baixado aqui: http://nuget.codeplex.com/releases/view/57303.Feito isso basta executar o comando da seguinte forma:
nuget pack arquivo.nuspecEste comando irá gerar um arquivo .nupkg que é o pacote do NuGet. Simples não é?
Criar pacotes para o NuGet é algo bastante simples. Levamos alguns minutos para preparar o arquivo .nuspec mas depois disso a coisa fica bastante automática.Em um próximo post mostrarem como integrei a geração do .nupkg ao meu processo de build automatizado para o projeto, ou seja, cópia dos arquivos, atribuição da versão ao arquivo .nuspec e geração do pacote, tudo automatizado dentro do meu script de build.Ontem eu comentei que, se você possui um projeto open source na plataforma .NET e não disponibiliza o mesmo no NuGet você está privando a comunidade de uma facilidade. Pense nisso.
Abraços, Vinicius Quaiato.