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:
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.

Quase 20 anos de experiência no mercado de TI.
Atuação em grandes empresas como Netshoes, Borland, JBS, Bradesco, Hospital das Clínicas, Rede, Prodam, HSPE, Instituto Ayrton Senna, e também em empresas internacionais como Delta Dental, T-Mobile, Pepsi e Mckesson.
Fundador da TecPrime Solutions, administrador da comunidade nopCommerce Brasil, e autor dos sites InvestFacil.net e Desenvolvedores.ninja