Gerenciando dependências em projetos .NET com a extensão NuGet

Veja neste artigo como utilizar a ferramenta NuGet a partir do Visual Studio. Essa extensão tem por finalidade principal gerenciar as bibliotecas utilizadas em aplicações .NET.

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:

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.

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

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:

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

Figura 3: Acessando o NuGet a partir do menu do Visual Studio
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:

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


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

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

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.

Figura 8: Pacote instalado via NuGet

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

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

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

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 ;)

Artigos relacionados