Fala filhotes! Semana passada eu falei um pouco sobre o NuGet e que o Paulovich.Data já estava disponível nele, agora vou explicar como fazer para adicionar a sua biblioteca ao NuGet!

Criando o seu próprio pacote

A primeira coisa é saber que há duas formas de adicionar o seu pacote: Você pode adicionar ao repositório do próprio NuGet (aonde todo mundo terá acesso) ou criar um repositório para você, aonde quem quiser ter acesso a ele terá que configurar o NuGet com o seu endereço, essa segunda opção é boa para empresas, que querem compartilhar suas bibliotecas apenas para dentro da empresa, ou ter controle de quais bibliotecas os programadores podem usar, etc… Nesse post será abordado essa segunda opção, ou seja a criação de um repositório local ( um lugar com todos os seus projetos do NuGet) :

Ferramentas

Para criar um pacote do NuGet você irá precisar baixar o NuGet Command Line Tool (ou em Downloads na pagina do NuGet para a versão mais nova ). Depois de baixar esse arquivo, nós vamos ter que criar o pacote do NuGet, para isso precisaremos adicionar todos os componentes da nossa biblioteca ( DLL, arquivos de config ) em pastas especificas, além de criar um arquivo .nuspec que será o nosso manifesto, ou seja, o arquivo de configuração do seu pacote para o NuGet.

Nuspec

Antes de criar o nosso arquivo .nuspec, vamos criar um pasta para o nosso projeto, vou chamar de Paulovich.Data.Package ( não importa o nome ). Dentro dessa pasta ficará o nosso arquivo .nuspec. O arquivo deve seguir esse padrão:

<?xml version="1.0"?>
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
   <id>Paulovich.Data</id>
   <version>4.0</version>
   <authors>Ivan Paulovich, Andre Paulovich</authors>
   <description>A light weight data acces layer. Easily call stored procedures and supports several types of datasources like SQL Server (2000,2005,2008) , Oracle, Access, Odbc </description>
   <summary>A light weight data acces layer.</summary>
   <language>pt-BR</language>
    <licenseUrl>http://paulovich.codeplex.com/license</licenseUrl>
    <projectUrl>http://paulovich.codeplex.com</projectUrl>
 </metadata>
</package>

Vamos salvar ele como Paulovich.Data.nuspec.

Importante: Se sua biblioteca depende de outro projeto, o ideal é você adicionar o seguinte elemento ao nuspec:

 <dependencies>
      <dependency id="Id_do_pacote_no_Nuget" version="3.0.0" />
 </dependencies> 

Com isso você não precisa adicionar a DLL da dependência no seu projeto, basta apenas adicionar a sua, claro considerando que o projeto da dependência também esta no NuGet.

Agora tá na hora de adicionar os arquivos da nossa biblioteca ( DLL, arquivos de configuração ) ao projeto NuGet. Para mais informações sobre o Nuspec clique aqui. Para isso temos que adiciona-los dentro de suas pastas especificas.

Pastas

O .nuspec fica na raiz do seu projeto, mas suas DLLs e outros componentes não. Você tem que usar o seguinte esquema de pastas, já que cada uma traz um comportamento especifico para os arquivos na instalação do seu projeto:

lib – As dlls da pasta serão adicionadas como referência.

Se sua biblioteca tem versões para diferentes frameworks basta criar pastas para cada versão da sua dll:

lib > net2.0 = .Net Framework 2.0

lib > SL4 = Silverlight 4.0

Se você tiver versões para 1.1, 2.0 e 4.0 do .net framework e estão tentando usar sua DLL num projeto que usa o 3.5, então será usado o 2.0, já que é a maior versão que é menor que a versão usada (3.5). Para mais informações clique aqui.

tools – São ferramentas úteis ao seu projeto, os arquivos serão copiados para a variável de Ambiente Path ($env:Path).

content – Os arquivos que estiverem nessa pasta irão ser copiados para a raiz do projeto.

Há casos em que para sua biblioteca funcionar você precise modificar o web.config, como no Paulovich.Data, que você precisa de uma connection string com o nome DbPortal. Para isso basta criar um arquivo web.config.transform, vou mostrar como é simples:

<configuration>
  <connectionStrings>    
    <add name="DbPortal"
         connectionString="Data Source=MyServer;Initial Catalog=MyDB;Integrated Security=True"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
  </configuration>

Pronto, veja que meu arquivo só tem a parte da connection string, ou seja, só a parte que eu quero que seja adicionada, e claro, isso funciona com outros arquivos de configuração (app.config, user.config). O próprio NuGet faz um merge nos arquivos para você. Clique aqui para maiores informações

Resultado

Então veja como ficou o meu projeto:

+Paulovich.Data.Package

   – Paulovich.Data.nuspec

  +Lib

   – Paulovich.Data.dll

   – MySql.Data.dll

    – Paulovich.Data.pdb

   +Content

    – web.config.transform

Pronto, agora que tudo esta nas pastas certas, vamos transformar isso em projeto do NuGet. Lembra daquele arquivo que baixamos antes? Vamos usar ele agora! Entre no cmd e execute o Nuget.exe passando pack e o endereço do seu .nuspec como parâmetro:

NuGet.exe pack i:\nuget\Paulovich.Data.Package\Paulovich.Data.nuspec

image

Depois disso um arquivo .nupkg será gerado. Beleza você gerou o seu primeiro pacote do NuGet! Mas como você usa isso agora?

Adicionando o Repositório ao NuGet

Agora que você tem uma pasta com o(s) seu(s) pacote(s), vá no Visual Studio, Tools >> Options:

image 

Depois Package Manager:

image

Nessa tela você vê todos repositórios, por padrão só tem o repositório oficial do NuGet. Basta você adicionar a pasta aonde estão os seus projetos, com um nome qualquer e pronto. Defini ele como repositório padrão também.

image

Pronto! Você já pode adicionar o seu pacote.

image

Você pode criar um local na rede para colocar os seus pacotes, deixando mais fácil o controle sobre que pacotes que os seus programadores podem usar.

Bom filhotes, espero que vocês tenham gostado! Da próxima vez pretendo mostrar como adiciona o pacote no repositório oficial do NuGet, para todo mundo ter acesso sem precisar fazer qualquer configuração a mais.

Abraços.

Obs: Veja a documentação no http://nuget.codeplex.com/ para maiores informações.