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

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

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

  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żają czas potrzebny do sklonowania repozytorium.
  2. Gdy pakiety są zawarte w repozytorium, deweloperzy mogą dodawać odwołania bezpośrednio do zawartości pakietu na dysku, a nie odwoływać się do pakietów za pomocą narzędzia NuGet, co może prowadzić do zakodowanych na stałe nazw ścieżek w projekcie.
  3. Coraz trudniej jest wyczyścić rozwiązanie wszelkich nieużywanych folderów pakietów, ponieważ musisz upewnić się, że nie usuniesz żadnych folderów pakietów, które nadal są używane.
  4. Pomijając pakiety, utrzymujesz czyste granice własności między kodem a pakietami od innych, od których zależysz. Wiele pakietów NuGet jest już utrzymywanych we własnych repozytoriach kontroli źródła.

Chociaż przywracanie pakietów jest zachowaniem domyślnym w przypadku pakietu NuGet, niektóre ręczne czynności są niezbędne do pomijania 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ć pakiety NuGet (.nupkg) packages folder i project.assets.json, między innymi. Aby uzyskać informacje, zobacz przykład dla .gitignore projektów programu Visual Studio:

Ważne części .gitignore pliku to:

# 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

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

Aby wyłączyć integrację kontroli źródła z programem TFVC dla wybranych plików:

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

    • Porada: w systemie 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 co najmniej, gdzie ustawienie disableSourceControlIntegration powoduje, że program Visual Studio pominą wszystko w folderze packages :

    <?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. W programie TFS 2012 lub nowszym lub w programie 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. (Możesz utworzyć plik w Eksploratorze Windows przy użyciu nazwy z .tfignore. kropką końcową, ale może być konieczne wyłączenie opcji "Ukryj znane rozszerzenia plików" najpierw).):

    # 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.