Пропуск пакетов NuGet в системах управления исходным кодом
Разработчики обычно пропускают пакеты NuGet из своих репозиториев управления исходным кодом и вместо этого полагаются на восстановление пакетов для переустановки зависимостей проекта перед сборкой.
К причинам использования восстановления пакетов относятся следующие:
- Распределенные системы управления версиями, такие как Git, включают полные копии каждой версии каждого файла в репозитории. Часто обновляемые двоичные файлы приводят к значительному раздуванию и увеличивают время, необходимое для клонирования репозитория.
- При включении пакетов в репозиторий разработчики должны добавлять ссылки непосредственно на содержимое пакета на диске, а не ссылаться на пакеты с помощью NuGet, что может привести к наличию в проекте жестко заданных путей.
- Становится все труднее очистить решение от неиспользуемых папок пакетов, так как при этом нужно не удалить используемые папки пакетов.
- Опуская пакеты, вы обеспечиваете четкие границы владения между вашим кодом и чужими пакетами, от которых вы зависите. Многие пакеты 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 для выбранных файлов:
Создайте папку с именем
.nuget
в папке решения (где находится файл.sln
).- Совет. Чтобы создать эту папку в проводнике Windows, используйте имя
.nuget.
с конечной точкой.
- Совет. Чтобы создать эту папку в проводнике Windows, используйте имя
В этой папке создайте файл с именем
NuGet.Config
и откройте его для редактирования.Добавьте хотя бы следующий текст, где параметр disableSourceControlIntegration предписывает Visual Studio пропустить все содержимое папки
packages
:<?xml version="1.0" encoding="utf-8"?> <configuration> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> </configuration>
Если вы используете TFS 2010 или более ранней версии, замаскируйте папку
packages
в сопоставлениях рабочей области.В TFS 2012 или более поздней версии либо в Visual Studio Team Services создайте файл
.tfignore
, как описано в статье о добавлении файлов на сервер. Включите в этот файл приведенное ниже содержимое, чтобы явно игнорировать изменения в папке\packages
на уровне репозитория и нескольких других промежуточных файлах. (Вы можете создать файл в проводнике Windows, используя имя.tfignore.
с конечной точкой, но сначала вам может потребоваться отключить параметр "Hide known file extensions" (Скрыть известные расширения файлов).)# 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
Добавьте
NuGet.Config
и.tfignore
в систему управления исходным кодом и верните изменения.