Dla większości moich projektów mam następującą konwencję:
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
Zauważysz, że nie przechowuję bibliotek zewnętrznych w folderze źródłowym. Jestem również bardzo zainteresowany korzystaniem z NuGet, ale nie chcę tych zewnętrznych bibliotek w folderze źródłowym. Czy NuGet ma ustawienie umożliwiające zmianę katalogu, w którym ładowane są wszystkie pakiety?
.net
visual-studio
nuget
nuget-package
TheCloudlessSky
źródło
źródło
Odpowiedzi:
Teraz można kontrolować, w którym folderze są zainstalowane pakiety.
http://nuget.codeplex.com/workitem/215
Edycja: Zobacz komentarz Phila Haacka z 10 grudnia 2010 o 23.45 (w elemencie pracy / linku powyżej). Wsparcie jest częściowo zaimplementowane w wersji 1.0, ale nie jest udokumentowane.
Według @dfowler: Dodaj plik nuget.config obok rozwiązania w ten sposób:
Istnieje pakiet nuget do tworzenia zastąpienia folderu pakietu.
Aktualizacja do wersji 2.1
Jak skomentował Azat, istnieje teraz oficjalna dokumentacja na temat kontrolowania lokalizacji paczek. Informacje o wersji 2.1 zawierają następującą konfigurację w pliku nuget.config (informacje o wersji zawierają opis prawidłowych miejsc do umieszczenia plików konfiguracji i działania hierarchicznego modelu konfiguracji):
Spowoduje to zmianę folderu pakietów dla poziomu konfiguracji, w którym umieścisz plik (rozwiązanie, jeśli umieścisz go w katalogu rozwiązania, projekt w katalogu projektu i tak dalej). Zauważ, że informacje o wydaniu stanowią:
źródło
to NIE działało dla mnie:
to zadziałało dla mnie:
źródło
Okej, ze względu na każdego, kto czyta ten post - oto, co rozumiem z niezliczonej liczby powyższych odpowiedzi:
Plik nuget.config w folderze .nuget jest względny w stosunku do tego folderu. Jest to ważne, ponieważ jeśli twój nowy folder to coś w rodzaju „../Packages”, umieści go tam, gdzie zawsze wychodzi po wyjęciu z pudełka. Jak stwierdza @ bruce14, musisz zamiast tego zrobić „../../Pakiety”
Nie mogłem pobrać najnowszego nugetu (2.8.5), aby znaleźć folder paczek poza standardową lokalizacją bez włączenia przywracania pakietu. Dlatego po włączeniu przywracania pakietu należy dodać do pliku nuget.config w folderze .nuget, aby zmienić lokalizację:
(Jest to ważne) Jeśli wprowadzisz DOWOLNE zmiany w lokalizacji folderu pakietu w plikach nuget.config, musisz ponownie uruchomić program Visual Studio lub zamknąć / ponownie załadować rozwiązanie, aby zmiany zostały wprowadzone
źródło
Rozwiązaniem dla Nuget 3.2 w Visual Studio 2015 jest:
Używanie ukośnika dla folderu nadrzędnego. Zapisz powyższy plik (nuget.config) w folderze rozwiązania.
Referencje są dostępne tutaj
źródło
../lib
To jest ukośnik do przodu, a nie do tyłu. Co masz na myśliRozwiązanie zaproponowane w informacjach o wersji 2.1 nie działa od razu po wyjęciu z pudełka. Zapomnieli wspomnieć, że istnieje kod:
co uniemożliwia mu działanie. Aby to naprawić, musisz zmodyfikować plik NuGet.targets i usunąć parametr „OutputDirectory”:
Więc teraz, jeśli dodasz konfigurację „repositoryPath” gdzieś w NuGet.config (zobacz uwagi do wydania, aby znaleźć opis prawidłowych miejsc do umieszczenia plików konfiguracyjnych), przywróci wszystkie pakiety w jedną lokalizację, ale ... Twój .csproj nadal zawiera wskazówki do zespołów zapisanych jako ścieżki względne ...
Nadal nie rozumiem, dlaczego przeszli ciężką drogę zamiast zmiany PackageManagera, aby dodać ścieżki wskazówek względem PackagesDir. W ten sposób robię ręcznie, aby lokalnie mieć różne lokalizacje pakietów (na pulpicie) i agenta kompilacji.
źródło
Oprócz odpowiedzi Shane Kms, jeśli aktywowałeś Przywracanie pakietu Nuget, edytujesz NuGet.config znajdujący się w folderze .nuget w następujący sposób:
Zwróć uwagę na dodatkowy „.. \”, ponieważ jest on odtwarzany z folderu .nuget, a nie z folderu rozwiązania.
źródło
Żadna z tych odpowiedzi nie działała dla mnie (Nuget 2.8.6) z powodu braku niektórych wskazówek, postaram się je tutaj dodać, ponieważ mogą być przydatne dla innych.
Po przeczytaniu następujących źródeł:
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
Wygląda na to, że
Na przykład
Możesz także użyć polecenia NuGet, aby upewnić się, że składnia będzie poprawna w następujący sposób:
źródło
W przypadku projektów .NET Core i Visual Studio 2017 udało mi się przywrócić wszystkie pakiety do ścieżki względnej, podając tę konfigurację:
Z mojego doświadczenia wynika, że folder lib został utworzony na tym samym poziomie, na którym znaleziono Nuget.config, bez względu na to, gdzie był plik SLN. Przetestowałem i zachowanie jest takie samo w przypadku przywracania dotnet z wiersza poleceń i przebudowywania programu Visual Studio 2017
źródło
globalPackagesFolder
klucz do folderu pakietu mojego projektu. Próbowałem dodać jeden pakiet zdotnet add package MyPackage
.nuget.exe
pobrałem całą strukturę 83 pakietów .NET do tego folderu. Nie o to mi chodziło. Chciałem tylko mój pojedynczy MyPackage w moim lokalnym, kontrolowanym przez źródło folderze pakietu.Plik konfiguracyjny w zaakceptowanej odpowiedzi działa dla mnie w VS2012. Jednak dla mnie działa to tylko wtedy, gdy wykonuję następujące czynności:
Jeśli wykonam te kroki, mogę użyć udostępnionego folderu pakietu.
źródło
Aby zmienić ścieżkę dla projektów korzystających z PackageReference zamiast paczek.config, musisz użyć
globalPackagesFolder
From https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file
Nuget.config umieściłem obok mojego pliku rozwiązania i zadziałało.
źródło
Jeszcze jeden mały smakołyk, który właśnie odkryłem. (Może to być tak podstawowe, że niektórzy o tym nie wspomnieli, ale było to ważne dla mojego rozwiązania.) Folder „paczki” kończy się w tym samym folderze, co plik .sln.
Przenieśliśmy nasz plik .sln, a następnie naprawiliśmy wszystkie ścieżki wewnątrz, aby znaleźć różne projekty i voila! Nasz folder paczek znalazł się tam, gdzie chcieliśmy.
źródło
AKTUALIZACJA VS VS 2017:
Wygląda na to, że ludzie w zespole Nuget w końcu zaczęli używać Nuget, co pomogło im znaleźć i naprawić kilka ważnych rzeczy. Więc teraz (jeśli się nie mylę, ponieważ nadal nie migrowałem do VS 2017) poniżej nie jest już konieczne. Powinieneś być w stanie ustawić „repositoryPath” na folder lokalny i to zadziała. Nawet Ty możesz go w ogóle zostawić, ponieważ domyślnie przywrócono lokalizację przeniesioną z folderów rozwiązania na poziom komputera. Znowu - wciąż nie testowałem tego sam
VS 2015 i wcześniejsze
Tylko wskazówka do innych odpowiedzi (szczególnie tego ):
Położenie folderu pakietu NuGet można zmienić poprzez konfigurację, ale VisualStudio nadal odwołuje się do zestawów w tym folderze względnie:
Aby obejść to (do lepszego rozwiązania), użyłem polecenia subst, aby utworzyć dysk wirtualny, który wskazuje na nową lokalizację folderu Packages:
Teraz podczas dodawania nowego pakietu NuGet odwołanie do projektu używa jego bezwzględnej lokalizacji:
Uwaga:
źródło
<HintPath>$(SolutionDir)\packages\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
zamiast używaćsubst
Właśnie aktualizuję za pomocą Nuget 2.8.3. Aby zmienić lokalizację zainstalowanych pakietów, włączyłem przywracanie pakietów z poziomu rozwiązania klikając prawym przyciskiem myszy. Edytowałem NuGet.Config i dodałem następujące linie:
Następnie przebudowałem rozwiązanie, pobrałem wszystkie pakiety do mojego pożądanego folderu i automatycznie zaktualizowałem referencje.
źródło
Najbardziej spójnym sposobem jest użycie
nuget config
prawidłowego ustawienia konfiguracji:https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changing-config-settings
źródło