Como é de conhecimento geral, o .NET Framework dispõe de uma ampla variedade de recursos, com diversas novidades sendo introduzidas a cada novo release. Graças a tais fatos, esta plataforma viabiliza a construção de aplicações sofisticadas voltadas a ambientes bastante heterogêneos (Web, desktop, dispositivos móveis).

No entanto, o desenvolvimento de novos sistemas esbarra, em inúmeras situações, na busca por alternativas que complementem as funcionalidades oferecidas nativamente pelo .NET. Frameworks e bibliotecas open source vêm sendo elaborados por desenvolvedores ao redor do mundo, como resposta às mais variadas necessidades. A própria Microsoft incentiva tais iniciativas, com isso acontecendo através do site CodePlex. Este último nada mais é do que um portal destinado à hospedagem de projetos open source que façam uso de tecnologias como .NET, SQL Server e SharePoint.

No caso específico da implementação de aplicações .NET, a utilização de uma biblioteca, pacote ou framework por um projeto no Visual Studio costuma envolver as seguintes ações:

  • Inicialmente é feita uma pesquisa à Internet, procurando encontrar uma biblioteca específica ou ainda, localizar alguma solução da qual não se possuía um grande conhecimento até aquele momento;
  • Uma vez encontrado o site que disponibiliza os recursos desejados, deve-se escolher a versão mais apropriada ao projeto e, finalmente, efetuar o download desta última;
  • Se o arquivo baixado for um wizard, será necessário se proceder com a instalação deste utilitário. Em se tratando de um arquivo num formato como ZIP ou RAR, o conteúdo do mesmo precisará ser descompactado em um local acessível ao projeto;
  • Adicionar então referências aos assemblies dos quais a solução considerada fará uso;
  • Por fim, é possível ainda que sejam necessários ajustes no arquivo de configurações da aplicação (Web.config ou app.config), por meio do preenchimento de parâmetros requeridos para a correta execução da biblioteca, pacote ou framework que se está consumindo.

O processo aqui descrito, por si só, é relativamente trabalhoso. Em um projeto extenso e que faça uso de diferentes bibliotecas e frameworks, a complexidade de se administrar todas essas dependências será ainda maior. Tudo isto pode ser agravado ao se considerar a necessidade quase certa de atualização destes pacotes num determinado momento (muitas soluções open source costumam lançar novos releases em curtos intervalos de tempo).

Vários profissionais atuando num mesmo projeto podem representar outra fonte de problemas. Caso um mecanismo de controle de versões (como o SVN ou o Team Foundation da Microsoft) não esteja sendo usado, existe o risco de cada desenvolvedor adicionar por conta própria diferentes versões de um mesmo pacote, gerando assim uma série de transtornos no decorrer de atividades rotineiras de implementação.

Procurando sanar todas essas dificuldades, a Microsoft disponibilizaria a partir do Visual Studio 2010 uma ferramenta conhecida como NuGet (Figura 1). Essa extensão tem como meta simplificar a manipulação de bibliotecas utilizadas dentro de uma solução, oferecendo para isto funcionalidades para a pesquisa, instalação ou, mesmo, a atualização de recursos adicionais utilizados por um projeto.

A extensão NuGet e o gerenciamento de dependências
Figura 1: A extensão NuGet e o gerenciamento de dependências

Bibliotecas e frameworks são manipulados através do utilitário NuGet sob a forma de pacotes/packages. Em termos práticos, um pacote é constituído por um conjunto de arquivos agrupados sob a extensão .nupkg, fazendo uso para isto de um padrão chamado Open Packaging Conventions (ou simplesmente “OPC”). Já o formato OPC equivale a um arquivo .zip comum (inclusive o mesmo faz uso deste tipo de compactação), contando ainda com informações de metadata que descrevem a estrutura do pacote em questão.

Além de mecanismos para a busca e instalação de recursos em um projeto .NET, o NuGet também conta com meios para a criação e posterior publicação de pacotes (isto é fundamental para tornar uma solução disponível a desenvolvedores do mundo inteiro). Maiores informações sobre este projeto podem ser obtidas através deste link.

O objetivo deste artigo é descrever como pacotes podem ser adicionados a uma solução .NET via NuGet. Para isto, será criado um projeto de testes dentro do Visual Studio 2012 e adicionado ao mesmo a biblioteca log4net.

Utilizando a extensão NuGet no Visual Studio 2012

Para a demonstração de como se utilizar o NuGet a partir do Visual Studio 2012, estará sendo gerado um projeto do tipo “Windows Forms Application” chamado TesteNuGet (Figura 2).

Criando um projeto Windows Forms para testes
Figura 2: Criando um projeto Windows Forms para testes

Com a aplicação criada, a tela de gerenciamento disponibilizada pelo NuGet pode ser acessada das seguintes formas:

  • Por meio do menu “TOOLS”, submenu “Library Package Manager” e, por fim, selecionando a opção “Manage NuGet Packages for Solution...”;
  • Clicando com o botão direito do mouse sobre a solução na janela Solution Explorer e escolhendo a opção “Manage NuGet Packages for Solution...”;
  • Repetindo o mesmo tipo de procedimento do passo anterior, só que desta vez com um clique com o botão direito do mouse sobre o projeto, dentro da janela Solution Explorer; acionar desta vez a opção “Manage NuGet Packages”.

As duas primeiras opções mencionadas permitem o gerenciamento das dependências de todos os projetos contidos em uma solução. Já no terceiro caso, ações deste tipo estarão restritas ao projeto específico que se está selecionando.

Para efeitos de teste, estará sendo utilizada a primeira alternativa citada. Quando o usuário acessar essa funcionalidade por meio do menu “TOOLS” (Figura 3), aparecerá então a tela de gerenciamento do NuGet (Figura 4).

Acessando o NuGet a partir do menu do Visual Studio
Figura 3: Acessando o NuGet a partir do menu do Visual Studio
Tela da ferramenta NuGet para gerenciamento de pacotes
Figura 4: Tela da ferramenta NuGet para gerenciamento de pacotes

Conforme é possível observar, o NuGet disponibiliza diversos filtros para a pesquisa de pacotes a serem incluídos em aplicações .NET:

  • Uma das opções prevê que sejam listadas apenas versões estáveis (“Stable Only”) ou ainda, pré-releases (“Include Prerelease”);
  • É possível também ordenar o resultado das pesquisas com base em critérios como pacotes mais baixados (“Most Downloads”), data de publicação (“Published Date”), além da ordem crescente (“Name: Ascending”) ou decrescente (“Name: Descending”) de nome;
  • A localização por nome de pacote também está disponível, sendo talvez um dos filtros mais utilizados (já que substitui todo o trabalho de localização de um pacote na Internet).

Digitando o valor “log4net” na caixa de texto que permite a pesquisa de pacotes por nome, serão retornadas todas as soluções relacionadas (conforme pode ser visualizado na Figura 5).

Localizando a biblioteca log4net via NuGet
Figura 5: Localizando a biblioteca log4net via NuGet

O log4net é um conjunto de recursos publicados pelo projeto Apache, tendo sido criado com a finalidade de simplificar tarefas relativas à geração de registros de log em uma aplicação.

Selecionar então a biblioteca log4net (primeiro item da lista) e clicar na opção “Install”. Será exibida uma tela para a seleção do projeto em que será incluída a referência (Figura 6); certificar-se de que a aplicação TesteNuGet está marcada e acionar o botão “OK”.

Adicionando uma referência a um projeto por meio do NuGet
Figura 6: Adicionando uma referência a um projeto por meio do NuGet

Neste momento, aparecerá uma janela indicando que o download/instalação do pacote está em curso (Figura 7).

Instalando um pacote através do NuGet
Figura 7: Instalando um pacote através do NuGet

Uma vez finalizado o processo de download e inclusão do pacote selecionado no projeto, será exibida mais uma vez a tela de gerenciamento do Nuget (Figura 8). É possível notar aqui um ícone verde, indicando que a biblioteca log4net foi adicionada com sucesso ao projeto.

Pacote instalado via NuGet
Figura 8: Pacote instalado via NuGet

Ao se chegar neste ponto, uma referência à biblioteca log4net terá sido adicionada ao projeto TesteNuGe (Figura 9).

Referência do log4net já adicionada ao projeto
Figura 9: Referência do log4net já adicionada ao projeto

Além da inclusão de novas referências a um projeto, o NuGet realiza outras alterações que podem passar de maneira despercebida para muitos desenvolvedores. Haverá situações em que modificações serão feitas também no arquivo .config da aplicação (mesmo não tendo sido o caso neste exemplo).

Toda vez que o NuGet é executado, um arquivo de nome packages.config é atualizado (se este não existir, acaba por ser gerado automaticamente), de forma a conter referências que possibilitem o gerenciamento dos pacotes utilizados dentro de uma solução.

Na Listagem 1 está o arquivo packages.config criado para aplicação TesteNuGet, sendo que o mesmo já contém uma declaração referenciando a biblioteca log4net.

Listagem 1: Arquivo packages.config

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
    <package id="log4net" version="2.0.0" targetFramework="net45" />
    </packages>
    

Uma pasta de nome “packages” também é criada/atualizada durante a execução deste processo, com a mesma estando situada dentro do diretório principal da solução.

Conforme demonstrado na Figura 10, os arquivos para utilização do log4net foram baixados a partir de um repositório na Internet e inseridos dentro em uma pasta dentro do diretório “packages”.

Referência do log4net já adicionada ao projeto
Figura 10: Referência do log4net já adicionada ao projeto

As diversas tarefas executadas por meio da tela de gerenciamento do NuGet podem ser substituídas também por comandos, os quais são acionados a partir de uma funcionalidade conhecida dentro do Visual Studio como Package Manager Console (Figura 11). O acesso a este utilitário é feito a partir do seguinte caminho: menu “TOOLS” > submenu “Library Package Manager” > “Package Manager Console”.

O utilitário Package Manager Console
Figura 11: O utilitário Package Manager Console

Importante destacar que o Package Manager Console possibilita a localização, instalação, atualização e ainda, remoção de pacotes de uma solução. Maiores informações sobre o mesmo podem ser obtidas através deste link.

Conclusão

A extensão NuGet foi criada com a clara intenção de aumentar a produtividade no desenvolvimento a partir do Visual Studio. Conforme destacado ao longo deste artigo, essa ferramenta contribui para uma economia significativa de tempo no que se refere ao gerenciamento das bibliotecas e frameworks utilizados por projetos .NET.

Espero que o conteúdo aqui apresentado possa ser útil no seu dia-a-dia.


Links Úteis

Saiba mais sobre NuGet ;)