Поделиться через


Исключение пакетов NuGet из систем контроля версий

Разработчики обычно не включают пакеты NuGet в репозитории системы управления версиями и вместо этого полагаются на функцию восстановления пакетов для переустановки зависимостей проекта перед сборкой.

Восстановление пакета осуществляется по следующим причинам:

  1. Распределенные системы управления версиями, такие как Git, включают полные копии каждой версии каждого файла в репозитории. Двоичные файлы, которые часто обновляются, приводят к значительному увеличению размера и продлевают время, необходимое для клонирования репозитория.
  2. Если пакеты включены в репозиторий, разработчики могут добавлять ссылки непосредственно на содержимое пакета на диске, а не ссылаться на пакеты через NuGet, что может привести к жестко закодированных именам путей в проекте.
  3. Чистка проекта от неиспользуемых директорий пакетов становится сложнее, так как нужно убедиться, что не удаляются папки пакетов, которые по-прежнему используются.
  4. Исключая пакеты, вы сохраняете четкие границы ответственности между вашим кодом и пакетами от других, от которых вы зависите. Многие пакеты NuGet поддерживаются в собственных репозиториях систем контроля версий.

Хотя восстановление пакетов — это поведение по умолчанию с NuGet, некоторые действия вручную необходимы, чтобы опустить пакеты (а именно packages , папку в проекте) из системы управления версиями, как описано в этой статье.

Исключение пакетов в Git

Используйте файл gitignore , чтобы игнорировать пакеты NuGet (.nupkg) папку packages и project.assets.json, помимо прочего. Дополнительные сведения см. в примере .gitignore проектов Visual Studio:

Важные части .gitignore файла:

# 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

Опущение пакетов с помощью управления версиями Team Foundation

Замечание

Следуйте этим инструкциям, если это возможно прежде чем добавлять проект в систему контроля версий. В противном случае вручную удалите папку packages из репозитория и проверьте это изменение, прежде чем продолжить.

Чтобы отключить интеграцию системы управления версиями с TFVC для выбранных файлов:

  1. Создайте папку, названную .nuget, в вашей папке решения (где находится файл .sln).

    • Совет: в Windows, чтобы создать эту папку в проводнике Windows, используйте имя .nuget.с законечной точкой.
  2. В этой папке создайте файл с именем NuGet.Config и откройте его для редактирования.

  3. Добавьте следующий текст как минимум, где параметр disableSourceControlIntegration указывает Visual Studio пропустить все в папке packages :

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <solution>
            <add key="disableSourceControlIntegration" value="true" />
        </solution>
    </configuration>
    
  4. Если вы используете TFS 2010 или более ранней версии, скройте папку packages в сопоставлениях рабочей области.

  5. В TFS 2012 или более поздней версии или в Visual Studio Team Services создайте .tfignore файл, как описано в разделе "Добавление файлов на сервер". В этом файле добавьте содержимое ниже, чтобы явно игнорировать изменения \packages папки на уровне репозитория и несколько других промежуточных файлов. (Файл можно создать в проводнике Windows с именем .tfignore. с завершающей точкой, но вам может потребоваться сначала отключить параметр "Скрыть известные расширения файлов".)

    # 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. Добавьте NuGet.Config и .tfignore в систему управления версиями и зафиксируйте изменения.