Pomijanie pakietów NuGet w systemach kontroli źródła

Deweloperzy zazwyczaj pomijają NuGet pakietów z repozytoriów kontroli źródła i polegają zamiast tego na przywracaniu pakietów w celu ponownego zainstalowania zależności projektu przed kompilacją.

Przyczyny polegania na przywracaniu pakietów są następujące:

  1. Rozproszone systemy kontroli wersji, takie jak Git, obejmują pełne kopie każdej wersji każdego pliku w repozytorium. Pliki binarne, które są często aktualizowane, prowadzą do znacznego wzdęć i wydłuża czas potrzebny na sklonowanie repozytorium.
  2. Gdy pakiety są zawarte w repozytorium, deweloperzy mogą dodawać odwołania bezpośrednio do zawartości pakietu na dysku, zamiast odwoływać się do pakietów za pośrednictwem NuGet, co może prowadzić do zakodowanych nazw ścieżek w projekcie.
  3. Czyszczenie rozwiązania wszelkich nieużywanych folderów pakietów staje się trudniejsze, ponieważ należy upewnić się, że nie są nadal używane żadne foldery pakietów.
  4. Pomijając pakiety, zachowujesz czyste granice własności między kodem a pakietami od innych, od których zależysz. Wiele pakietów NuGet jest już przechowywanych we własnych repozytoriach kontroli źródła.

Chociaż przywracanie pakietów jest zachowaniem domyślnym w przypadku NuGet, konieczne jest pominięcie pakietów — a mianowicie folderu w projekcie packages — z kontroli źródła, zgodnie z opisem w tym artykule.

Pomijanie pakietów za pomocą usługi Git

Użyj pliku .gitignore, aby zignorować NuGet pakiety (.nupkg) packages folderu i project.assets.json, między innymi. Aby uzyskać informacje, zobacz przykład .gitignore dla projektów Visual Studio:

Ważnymi częściami .gitignore pliku są:

# 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

Pomijanie pakietów przy użyciu Kontrola wersji serwera Team Foundation

Uwaga

Jeśli to możliwe, przed dodaniem projektu do kontroli źródła postępuj zgodnie z tymi instrukcjami. W przeciwnym razie ręcznie usuń folder z repozytorium i zaewidencjonuj packages zmianę przed kontynuowaniem.

Aby wyłączyć integrację kontroli źródła z Kontrola wersji serwera Team Foundation dla wybranych plików:

  1. Utwórz folder o nazwie .nuget w folderze rozwiązania (gdzie znajduje się .sln plik).

    • Porada: w Windows, aby utworzyć ten folder w eksploratorze Windows, użyj nazwy .nuget.z kropką końcową.
  2. W tym folderze utwórz plik o nazwie NuGet.Config i otwórz go do edycji.

  3. Dodaj następujący tekst jako minimum, gdzie ustawienie disableSourceControlIntegration powoduje, że Visual Studio pominąć wszystko w folderzepackages:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <solution>
            <add key="disableSourceControlIntegration" value="true" />
        </solution>
    </configuration>
    
  4. Jeśli używasz programu TFS 2010 lub starszego, zamaskuj packages folder w mapowaniach obszaru roboczego.

  5. Na serwerze TFS 2012 lub nowszym lub przy użyciu Visual Studio Team Services utwórz plik zgodnie z opisem .tfignore w temacie Dodawanie plików do serwera. W tym pliku dołącz poniższą zawartość, aby jawnie zignorować modyfikacje \packages folderu na poziomie repozytorium i kilka innych plików pośrednich. (Plik można utworzyć w eksploratorze Windows przy użyciu nazwy z .tfignore. kropką końcową, ale może być konieczne wyłączenie najpierw opcji "Ukryj znane rozszerzenia plików".):

    # 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. Dodaj NuGet.Config kontrolkę źródła i .tfignore do kontroli źródła i zaewidencjonuj zmiany.