Przed NuGet powszechnie akceptowaną „najlepszą praktyką” było rejestrowanie wszystkich zewnętrznych bibliotek DLL używanych w projekcie. Zwykle w katalogu Libs
lub 3rdParty
.
Czy podczas pracy z programem NuGet mam zaewidencjonować packages
katalog, czy istnieje sposób, aby program MSBuild automatycznie pobierał potrzebne pakiety z źródła danych NuGet?
version-control
msbuild
nuget
Scott Weinstein
źródło
źródło
Odpowiedzi:
Nie
Ponieważ zadano to pytanie, istnieje teraz łatwy przepływ pracy do korzystania z NuGet bez zatwierdzania pakietów do kontroli źródła
Z konsoli menedżera pakietów musisz zainstalować „NuGetPowerTools” :
Następnie, aby umożliwić projektom obsługę przywracania pakietów, musisz uruchomić inne polecenie:
Teraz możesz zatwierdzić swoją bazę kodu bez folderu packages. Poprzednie polecenie zmieniło pliki projektu, aby w przypadku braku pakietów były one automatycznie pobierane i dodawane.
Źródło
Używanie NuGet bez zatwierdzania pakietów do kontroli źródła
źródło
Enable NuGet Package Restore
. Zobacz dokumentację .Tak. Rozważ katalog "packages" jako odpowiednik twojego katalogu "libs", o którym wspomniałeś w pytaniu. To jest podejście, które osobiście stosuję w moich projektach OSS.
Badamy funkcje, które umożliwiłyby programowi MSBuild automatyczne pobieranie potrzebnych pakietów, ale nie zostały one zaimplementowane (od wersji NuGet 1.1).
Myślę, że niektórzy ludzie mogli już samodzielnie zaimplementować takie funkcje, ale naszym planem jest, miejmy nadzieję, włączenie tej funkcji do NuGet 1.2 lub 1.3.
źródło
Pomimo wszystkich odpowiedzi tutaj, nadal jest zwykłym okropnym rozwiązaniem, aby nie mieć wszystkich swoich zależności pod „jakąś” kontrolą wersji.
Dla GIT oznaczałoby to GIT-LFS.
Niedawny odcinek z NPM pokazuje, dlaczego: jeśli repozytorium internetowe, od którego jesteś zależny, zepsuje się, jest niedostępne itp., To masz przerąbane?
Nie jesteś już w stanie budować swoich rzeczy - a zatem nie jesteś w stanie dostarczyć.
źródło
npm
zepsuł się, ponieważ nie wyrejestrował pakietów z listy, w rzeczywistości je usunął. NuGet tego nie robi; jeśli w dowolnym momencie nie możesz uzyskać dostępu do NuGet, coś jest strasznie nie tak. Nie sądzę, aby przechowywanie craptonne zależności w git było dobrym rozwiązaniem: po prostu zablokuj swoje zależności w określonej wersji i miej lustro pomiędzy tobą a Internetem, jeśli to dla ciebie ważne.Odkąd zadałem pytanie, zastosowałem następujące podejście, aby nie musieć sprawdzać katalogu toplovel Packages .
W pliku build.msbuild najwyższego poziomu:
<Target Name="NuGet"> <ItemGroup> <NuGetPackage Include="*\packages.config" /> </ItemGroup> <Exec Command='libs\NuGet.exe install "%(NuGetPackage.FullPath)" -o Packages' /> <!-- optional for project that has JavaScript content --> <CreateItem Include="Packages\*\Content\Scripts\*"> <Output TaskParameter="Include" ItemName="NuGetJSFiles"/> </CreateItem> <Copy SourceFiles="@(NuGetJSFiles)" DestinationFolder="MainProj\Scripts\" OverwriteReadOnlyFiles="true" SkipUnchngedFiles="true" /> <Delete Files="MainProj\Scripts\.gitignore" /> <WriteLinesToFile File="MainProj\Scripts\.gitignore" Lines="%(NuGetJSFiles.Filename)%(NuGetJSFiles.Extension)" / <Delete Files="@(PostNuGetFiles)" /> </Target>
W każdym pliku project.csproj
<Target Name="BeforeBuild"> <Error Condition="!Exists('..\Packages\')" Text="You must run > msbuild build.msbuild to download required NuGet Packages" /> <!-- optional for project that has JavaScript content --> <ReadLinesFromFile File="Scripts\.gitignore"> <Output TaskParameter="Lines" ItemName="ReqJSFiles" /> </ReadLinesFromFile> <Message Text="@(ReqJSFiles)" /> <Error Condition="!Exists('Scripts\%(ReqJSFiles.Identity)')" Text="You must run > msbuild build.msbuild to download required NuGet JS Package - Scripts\%(ReqJSFiles.Identity)" /> </Target>
źródło
Zdaję sobie sprawę, że rzeczywistość była inna, gdy pierwotnie opublikowano to pytanie i na nie udzielono odpowiedzi, ale na szczęście odpowiedź nieco się zmieniła. Teraz można używać narzędzia NuGet do pobierania zależności za pośrednictwem programu MSBuild przy użyciu zdarzenia przed kompilacją. Nie musisz umieszczać folderu pakietów w repozytorium kodu, wszystkie zależności zostaną pobrane i / lub zaktualizowane podczas kompilacji. Może to obejście, ale wygląda wystarczająco przyzwoicie. Szczegółowe informacje można znaleźć w następującym poście na blogu: http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
źródło
Od 20.09.13 istnieje coś, co nazywa się „Nuget Restore”. W rzeczywistości nie musisz sprawdzać folderu pakietu, jeśli chcesz to zrobić. (Zwłaszcza jeśli używasz DVCS)
Zobacz to: Używanie NuGet bez zatwierdzania pakietów do kontroli źródła http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
źródło
Ten post stał się bardzo nieaktualny. Odpowiedź nadal brzmi NIE, ale rozwiązanie się zmieniło. Począwszy od NuGet 2.7+ możesz włączyć automatyczne przywracanie pakietów bez dołączania pliku NuGet.exe do źródła (jest to co najmniej niepożądane), a jeśli używasz dowolnego nowoczesnego DVCS, możesz zignorować folder pakietów. Jeśli potrzebujesz specjalnych dostosowań, możesz utworzyć plik nuget.config w katalogu głównym rozwiązania.
http://docs.nuget.org/docs/reference/package-restore
Ponadto dzięki nowemu formatowi csproj można również uniknąć dodatkowych plików nuget.config, ponieważ jest on teraz zintegrowany. Sprawdź ten post, który wyjaśnia to lepiej:
Czy folder .nuget powinien zostać dodany do kontroli wersji?
źródło