.NET - Nuget referência por pacote ou packages.config

NuGet

É o gerenciador de pacotes .NET, possibilita a publicação e utilização de bibliotecas, assim como npm, yarn, pip, gem e etc. Por algum tempo o NuGet foi até mesmo recomendado para frameworks front-end, Bootstrap, Angular, jQuery, entre outros.

Porém em meados de 2015, ficou claro que o foco do NuGet são pacotes back-ends, tanto que a partir do Visual Studio 2015, houve uma integração com Bower para gerenciamento dos pacotes front-end, pois o bower simplesmente gerencia melhor este tipo de dependência.

Packages.config

Ao instalar um pacote informações como o nome, versão e dados de compatibilidade são persistidos no arquivo package.config, já os binários ou biblioteca são mantidos na pasta packages para utilização dos projetos a solução. Resumidamente o arquivo packages.config é bem simples e fácil de entender.

  • packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="NLog" version="4.3.10" targetFramework="net46" />
</packages>

Referências em pacote

A partir do Visual Studio 2017 foi introduzida uma nova "feature", onde é possível adicionar uma referência de um pacote diretamente no seu projeto, estas informações são persistidas no .csproj.

  • Arquivo .csproj:
 <ItemGroup>
    <PackageReference Include="Autofac">
      <Version>4.6.2</Version>
    </PackageReference>
 </ItemGroup>

Apesar das referências serem apresentadas como um pacote, fique ciente que as dependências indiretas serão publicadas na bin, sendo assim, se houverem dependências em comum entre outros pacotes (ex: System.Collections), apenas uma versão será considerada no deploy, claro o NuGet avisa sobre esta dependência em comum durante a instalação de pacotes.

Qual a vantagem?

Os pacotes por referência deixam sua lista de dependências enxuta, objetiva e direta, as dependências indiretas, ou dependências das dependências, não serão listadas no Nuget, no meu ponto de vista, torna mais fácil o gerenciamento, já que após a iniciativa .NET Core, é comum encontrar um projeto com diversas referências as bibliotecas System.IO, System.Collections entre outras bibliotecas muito utilizadas.

Configuração / Extensões

É possível configurar o padrão ao instalar referência do NuGet por Packages.config ou PackageReference.

Existem extensões do Visual Studio que ajudam a converter para PackageReference:

Referências

https://docs.microsoft.com/en-us/nuget/schema/packages-config