Czy folder .nuget powinien zostać dodany do kontroli wersji?

107

W nowszych wersjach NuGet można skonfigurować projekt do automatycznego przywracania pakietów NuGet, dzięki czemu packagesfolder nie musi być uwzględniany w repozytorium kodu źródłowego. Dobry.

Jednak to polecenie dodaje nowy .nugetfolder i jest tam plik binarny, NuGet.exe. Może to również zostać ponownie utworzone automatycznie przez program Visual Studio, więc dodawanie tego do kontroli wersji nie jest poprawne. Jednak bez tego folderu program Visual Studio nawet nie załaduje poprawnie rozwiązania.

Jak sobie z tym radzicie? Dodać .nuget do kontroli źródła? Uruchomić skrypt wiersza poleceń przed otwarciem rozwiązania?

Borek Bernard
źródło
To jest najbardziej autentyczny link docs.nuget.org/docs/workflows/ ... i ponieważ jest to stary wątek. Chciałbym tylko podzielić się informacją w komentarzu ...
Naveed Butt

Odpowiedzi:

47

Ten wpis jest stary, nie należy już używać przywracania pakietu NuGet na poziomie rozwiązania. Od wersji 2.7 lub nowszej w konfiguracji NuGet istnieje opcja automatycznego przywracania pakietów podczas kompilacji. Dzięki temu folder .nuget może zostać usunięty, a opcja usunięta z projektów.

http://docs.nuget.org/docs/reference/package-restore

AKTUALIZACJA: Wraz z wydaniem NuGet 4.x i .NET Standard 2.0, gdy używasz nowego formatu csproj, możesz teraz używać odwołań do pakietów, ironicznie przywracając zależność od msbuild do przywracania pakietów, ale teraz pakiety są obywatelami pierwszej klasy MSBuild . Powyższy link również wspomina o PackageReference, ale poniższe ogłoszenie opisuje to lepiej:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

I zapowiedź NuGet 4.x RTM, która jak na ironię nie jest tak przydatna:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

AKTUALIZACJA 2: Najwyraźniej w VS2017 można nawet używać odwołań do pakietów z klasycznymi projektami csproj, ale nie są one już kompatybilne wstecz i wystąpiły problemy z przywróceniem zależności podrzędnych pakietów. Jestem pewien, że wszystko zostanie rozwiązane.

Jeremy
źródło
8
To jest jaśniejsze wyjaśnienie, jak migrować. Na Githubie
gość z CAD
@CAD Bloke, tak, to jest na liście do przeczytania na dole, dziękuję za zawężenie.
Jeremy
Możesz łatwo zaktualizować Nuget w VS przy użyciu Tools > Extensions & Updates > Updates.
wesoły
47

Odpowiedź @Richarda Szalaya jest prawidłowa - nie musisz zatwierdzać nuget.exe. Jeśli z jakichś powodów program Visual Studio nie pobiera automatycznie pliku NuGet. Exe, upewnij się, że w pliku masz następujący ustawiony na wartość truenuget.targets :

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

Zamknij rozwiązanie VS, otwórz je ponownie i skompiluj. Program Visual Studio powinien teraz automatycznie pobrać plik NuGet.exe.

Gan
źródło
Nawiasem mówiąc, każdy wie, dlaczego nie jest ustawiony truedomyślnie?
ajukraine,
2
To bardziej kwestia prywatności. „Prosta czynność polegająca na wysłaniu zapytania przez Internet może ujawnić informacje o użytkowniku (na przykład na podstawie adresu IP użytkownika możemy w przybliżeniu określić jego lokalizację)”. Zobacz artykuł dotyczący przywracania i zgody pakietu na blogu firmy Nuget
Gan,
1
Do Twojej wiadomości: gdy NuGet.exe nie jest obecny w folderze .nuget, w menu kontekstowym rozwiązania zostanie wyświetlony komunikat „Włącz przywracanie pakietu NuGet”, mimo że przywracanie pakietu NuGet jest już skonfigurowane. Po kompilacji opcja zniknie.
przyjdź
To powinna być akceptowana odpowiedź, IMO ... Gdyby NuGet.exe był bardzo mały, może powiedziałbym, że umieść go w kontroli źródła i zajmij się wszystkim, co musisz zrobić w pliku ignorowania. Ale to 1,5 megapiksela, to wystarczająco dużo, abym zawsze robił to w sposób Gana.
Brian MacKay
Skąd pobiera formularz NuGet.exe? Co jeśli mój buildserver nie ma internetu?
bitbonk
20

Musisz się zaangażować .nuget\nuget.targets, ale nie nuget.exe. Obiekty docelowe pobiorą exe, jeśli nie istnieje, o ile zmienisz DownloadNuGetExena truenuget.targets

Richard Szalay
źródło
4

Chociaż zwykle nie podoba mi się pomysł dodawania plików exe do kontroli źródła, sugerowałbym, aby kontrola źródła zawierała wszystko, co jest wymagane do otwarcia, zbudowania i wykonania projektu.

W tym przypadku wygląda na to, że folder .nuget jest wymaganą zależnością. Dlatego powinien być pod kontrolą źródła.

Pozostaje tylko pytanie, które należy zbadać, to, jak NuGet zareaguje, jeśli ten folder zostanie oznaczony jako tylko do odczytu, co zrobi TFS po jego zarejestrowaniu.


Aktualizacja: Zrobiłem trochę więcej badań na ten temat, ponieważ nigdy wcześniej nie korzystałem z NuGet. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

Sugerowałbym, że prawdopodobnie to, co chcesz zrobić, to uczynić NuGet wymaganiem, które musi być zainstalowane na każdej stacji roboczej dewelopera.

Ponadto należy umieścić w kontroli źródła plik wsadowy wymagany do przygotowania stacji roboczej do rozpoczęcia edycji projektu. Plik wsadowy będzie uruchamiał polecenia niezbędne do pobrania i zainstalowania pakietów zależności.

Poza tym powiedziałbym, że możesz chcieć skontaktować się bezpośrednio z NuGet, aby zapytać ich, jak dokładnie to ma działać.

Nie ja
źródło
1
Pomyślałem, że <RestorePackages>true</RestorePackages>w pliku * .csproj powinno być wystarczająco dużo informacji dla Visual Studio, ale może tak nie jest.
Borek Bernard
1

Teraz, gdy nuget obsługuje przywracanie pakietów, przyjrzymy się temu dokładniej.

Używamy Subversion do kontroli źródła i moje początkowe przemyślenia są takie, że .nugetpowinno zostać dodane do naszego repozytorium, ale dodane za pomocą svn: externals, aby wskazywało na jedną lokalizację.

W ten sposób możemy automatycznie wysyłać nowe wersje do wszystkich programistów i projektów. W przypadku projektów w gałęziach wydania, a nie HEAD, możemy określić wersję odwołania svn: externals, jeśli chcemy zostawić nuget w spokoju.

Mamy wiele projektów, więc oznacza to również nie dublowanie nuget.exe wielokrotnie w repozytorium.

si618
źródło
Nie mogłem uzyskać NuGet do przywracania zewnętrznych pakietów projektu. Czy to zadziałało dla Ciebie?
Doguhan Uluca
Tak, chociaż NuGet.exe wydaje się mieć problemy z uwierzytelnianiem w naszym lokalnym repozytorium (uwierzytelnianie IIS 6 + SSL + AD), podczas gdy Powershell lub Extension Plugin działają poprawnie.
si618,
1

Mamy nuget.configplik w folderze, ponieważ zawiera on odniesienia do naszego wewnętrznego serwera Nuget, korzystając z obszaru Źródła pakietów: https://docs.nuget.org/consume/nuget-config-settings

Oprócz tego należy pozwolić programowi Visual Studio na obsługę pobierania pakietów.

Karl Gjertsen
źródło