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:
- 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.
- 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.
- 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.
- 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:
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ą.
- Porada: w systemie Windows, aby utworzyć ten folder w Eksploratorze Windows, użyj nazwy
W tym folderze utwórz plik o nazwie
NuGet.Config
i otwórz go do edycji.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>
Jeśli używasz programu TFS 2010 lub starszego, zamaskuj
packages
folder w mapowaniach obszaru roboczego.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
Dodaj
NuGet.Config
kontrolkę źródła i.tfignore
do kontroli źródła i zaewidencjonuj zmiany.