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

Deweloperzy zwykle pomijają NuGet z repozytoriów kontroli źródła i polegają zamiast tego na przywracaniu pakietów, aby ponownie zainstalować zależności projektu przed kompilacją.

Powody, dla których można polegać na przywracaniu pakietu, są następujące:

  1. Rozproszone systemy kontroli wersji, takie jak Git, zawierają pełne kopie każdej wersji każdego pliku w repozytorium. Często aktualizowane pliki binarne znacznie wydłużają czas klonowania repozytorium.
  2. Gdy pakiety są zawarte w repozytorium, deweloperzy są odpowiedzialni za dodawanie odwołań bezpośrednio do zawartości pakietu na dysku, zamiast odwoływać się do pakietów za pośrednictwem programu NuGet, co może prowadzić do zakodowanych nazw ścieżek w projekcie.
  3. Czyszczenie wszelkich nieużywanych folderów pakietów staje się trudniejsze, ponieważ należy upewnić się, że żadne foldery pakietów nie są nadal używane.
  4. Pomijając pakiety, utrzymujesz czyste granice własności między kodem i pakietami innych, od których zależysz. Wiele NuGet jest już utrzymywanych we własnych repozytoriach kontroli źródła.

Chociaż przywracanie pakietów jest zachowaniem domyślnym w NuGet, niektóre działania ręczne są niezbędne do pominięcia pakietów — czyli folderu w projekcie — z kontroli źródła, zgodnie z opisem w packages tym artykule.

Pomijanie pakietów w usłudze Git

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

Ważne elementy pliku .gitignore 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 z Kontrola wersji serwera Team Foundation

Uwaga

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

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

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

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

  3. Dodaj co najmniej następujący tekst, w którym ustawienie disableSourceControlIntegration Visual Studio pominięcie wszystkiego w folderze:

    <?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 w Visual Studio Team Services utwórz plik zgodnie z opisem w te .tfignore.tfignoreplików do serwera . W tym pliku dołącz zawartość poniżej, aby jawnie zignorować modyfikacje folderu na poziomie repozytorium i \packages kilku innych plików pośrednich. (Plik można utworzyć w Eksploratorze Windows przy użyciu nazwy a z kropką na końcowej stronie, ale może być konieczne najpierw wyłączenie opcji "Ukryj znane rozszerzenia .tfignore. 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 i do kontroli kodu .tfignore źródłowego i zaewidencjlij zmiany.