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>

Referência do projeto diferenciada por pacote

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