{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.nuspec
Este 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.