Compartilhar via


Omitindo pacotes NuGet em sistemas de controle do código-fonte

Os desenvolvedores normalmente omitem pacotes NuGet de seus repositórios de controle do código-fonte e dependem, em vez disso, da restauração do pacote para reinstalar as dependências de um projeto antes de um build.

Os motivos para depender da restauração do pacote incluem o seguinte:

  1. Sistemas de controle de versão distribuída, como o Git, incluem cópias completas de cada versão de cada arquivo dentro do repositório. Arquivos binários que são atualizados frequentemente levam a um crescimento exagerado e prolongam o tempo necessário para a clonagem do repositório.
  2. Quando os pacotes são incluídos no repositório, os desenvolvedores são responsáveis por adicionar referências diretamente ao conteúdo do pacote no disco, em vez de referenciar pacotes por meio do NuGet, o que pode levar a nomes de caminho embutidos em código no projeto.
  3. Torna-se mais difícil limpar sua solução dos diretórios de pacotes não utilizados, pois é necessário garantir que não exclua nenhum diretório de pacotes ainda em uso.
  4. Ao omitir pacotes, você mantém limites limpos de propriedade entre seu código e os pacotes de outros dos quais você depende. Muitos pacotes NuGet já são mantidos em seus próprios repositórios de controle do código-fonte.

Embora a restauração de pacote seja o comportamento padrão com o NuGet, algum trabalho manual é necessário para omitir pacotes, ou seja, a packages pasta em seu projeto, do controle do código-fonte, conforme descrito neste artigo.

Omitindo pacotes com o Git

Use o arquivo .gitignore para ignorar os pacotes NuGet (.nupkg) a packages pasta e project.assets.json, entre outras coisas. Para obter referência, consulte o exemplo .gitignore de projetos do Visual Studio:

As partes importantes do .gitignore arquivo são:

# Ignore NuGet Packages
*.nupkg

# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*

# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/

# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config

# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Ignore other intermediate files that NuGet might create. project.lock.json is used in conjunction
# with project.json (NuGet v3); project.assets.json is used in conjunction with the PackageReference
# format (NuGet v4 and .NET Core).
project.lock.json
project.assets.json

Omitindo pacotes com o Controle de Versão do Team Foundation

Observação

Siga estas instruções, se possível , antes de adicionar seu projeto ao controle do código-fonte. Caso contrário, exclua manualmente a packages pasta do repositório e faça check-in dessa alteração antes de continuar.

Para desabilitar a integração do controle do código-fonte com o TFVC para arquivos selecionados:

  1. Crie uma pasta chamada .nuget na pasta da solução (onde o .sln arquivo está).

    • Dica: no Windows, para criar essa pasta no Windows Explorer, use o nome .nuget.com o ponto à direita.
  2. Nessa pasta, crie um arquivo nomeado NuGet.Config e abra-o para edição.

  3. Adicione o seguinte texto pelo menos, onde a opção disableSourceControlIntegration instrui o Visual Studio a ignorar tudo na packages pasta:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <solution>
            <add key="disableSourceControlIntegration" value="true" />
        </solution>
    </configuration>
    
  4. Se você estiver usando o TFS 2010 ou anterior, oculte a pasta packages nos mapeamentos da área de trabalho.

  5. No TFS 2012 ou posterior ou com o Visual Studio Team Services, crie um .tfignore arquivo conforme descrito em Adicionar Arquivos ao Servidor. Nesse arquivo, inclua o conteúdo abaixo para ignorar explicitamente as modificações na \packages pasta no nível do repositório e alguns outros arquivos intermediários. (Você pode criar o arquivo no Windows Explorer usando o nome a .tfignore. com o ponto à direita, mas talvez seja necessário desabilitar a opção "Ocultar extensões de arquivo conhecidas" primeiro.):

    # Ignore NuGet Packages
    *.nupkg
    
    # Ignore the NuGet packages folder in the root of the repository. If needed, prefix 'packages'
    # with additional folder names if it's not in the same folder as .tfignore.   
    packages
    
    # Omit temporary files
    project.lock.json
    project.assets.json
    *.nuget.props
    
  6. Adicione NuGet.Config e .tfignore ao controle do código-fonte e faça check-in de suas alterações.