Myślę, że niektórzy ludzie nie rozumieją, co ma zrobić przywracanie pakietów. Ta funkcja została dodana do NuGet wyłącznie w celu niewymagania sprawdzania pakietów w kontroli wersji. Wiele osób narzekało na to, że polecanie plików binarnych eksplodowało rozmiar ich repozytoriów, a jeszcze gorzej, gdy używa się DVCS jak git, gdzie całe repo jest pobierane lokalnie i zawiera każdą wersję pakietu Foo.
Co dokładnie robi przywracanie pakietu? Zasadniczo wygląda to w pliku packages.config każdego projektu i po prostu usuwa konkretną wersję wymienionego pakietu. To tak jak usuwanie folderu paczek, a następnie wykonanie git reset --hard
, aby je przywrócić (zakładając, że folder został zaznaczony).
Dlaczego jest to ważne? Dlaczego nie uaktualnić do najnowszej wersji pakietu? Jeśli weźmiesz pod uwagę najczęstszy przypadek użycia funkcji przywracania pakietów, która polega na wykonywaniu zautomatyzowanych kompilacji, powinna dać ci wskazówkę. Serwer budujący powinien budować tylko projekt, który został przetestowany i zatwierdzony przez programistę. Jeśli pozwolisz, aby serwer kompilacji zdecydował, kiedy zaktualizować pakiet, masz projekt, który nie został przetestowany przez nikogo. Jako programista powinieneś być tym, który zdecyduje, kiedy dokonać aktualizacji.
Pamiętaj, że instalacja lub aktualizacja pakietu nie polega po prostu na usunięciu pliku .nupkg i dodaniu odnośników. Wiele pakietów ma skutki uboczne, takie jak aktualizowanie plików .config, dodawanie kodu, itp. Podczas instalowania pakietu wszystkie te skutki uboczne występują w lokalnej kopii. Możesz teraz zatwierdzić swój kod i wykluczyć pliki pakietów.
Gdy inny programista lub serwer kompilacji sprawdzi kod, otrzyma on ten sam kod efektu ubocznego, co minus pliki pakietu. Przywracanie pakietów po prostu ściąga te pliki z repozytorium NuGet, a teraz mamy wszystko, co potrzebne do pracy nad tym projektem.
Zespół NuGet obiecał utrzymywać wszystkie wersje pakietów, dzięki czemu zawsze będzie można pobrać właściwą wersję. Jednak, jak widzieliśmy kilka miesięcy temu, kiedy serwer NuGet przestał działać, prawie sparaliżowało Przywracanie pakietów i wielu ludzi nie udało się zbudować.
Polecam skonfigurować własne repozytorium NuGet (wystarczy zwykły udział w pliku) i zachować kopie wszystkich pakietów, których tam używasz. W ten sposób nie jesteś zależny od zewnętrznego serwera dla twoich kompilacji. I tak jak zespół NuGet, powinieneś zachować WSZYSTKIE wersje pakietu. W ten sposób, jeśli będziesz musiał wrócić i zbudować starszą wersję swojego projektu, będziesz mieć pewność, że dostępne są poprawne wersje pakietów.
Mam nadzieję, że to wyjaśni, jak działa ta funkcja i dlaczego działa w ten sposób.
To jest sprzeczne z punktem przywracania pakietu, czyż nie? .. –
Tak, robi to, ale OP wspomniano, jeśli istniała jakakolwiek konfiguracja składni pakietów, aby uzyskać najnowsze wersje. Gdy raz zostanie to zrobione, każda osoba korzystająca z repozytorium będzie mogła pobrać projekt przy użyciu przywracania pakietu. – dougajmcdonald
Ten projekt jest częścią niestandardowego szablonu rozwiązania, który robię dla naszych wewnętrznych projektów. Chodzi o to, że programista utworzy nowe rozwiązanie z szablonu i udostępni całą strukturę (w tym gotowe odniesienia do pakietów infrastruktury) i będzie gotowy do pracy. Nie mam problemu z napisaniem niestandardowego skryptu, który przejdzie przez wszystkie projekty w roztworze i ponownie zainstaluje pakiety w razie potrzeby, ale mówienie ludziom, aby zaczęli grzebać w szablonie, aby działało, jest złe ... –