Genel paketleri, HTTP önbelleğini ve geçici klasörleri yönetme

Bir paketi yüklediğinizde, güncelleştirdiğinizde veya geri yüklediğinizde NuGet, proje yapınızın dışındaki birkaç klasördeki paketleri ve paket bilgilerini yönetir:

İsim Yer
genel paketler
  • Windows: %userprofile%\.nuget\packages
  • Mac/Linux: ~/.nuget/packages
  • NUGET_PACKAGES ortam değişkenini globalPackagesFolder , veya repositoryPathyapılandırma ayarlarını (sırasıyla PackageReference ve packages.configkullanırken) veya RestorePackagesPath MSBuild özelliğini (yalnızca MSBuild) kullanarak geçersiz kılın. Ortam değişkeni yapılandırma ayarından önceliklidir.
http-cache
  • Windows: %localappdata%\NuGet\v3-cache
  • Mac/Linux: ~/.local/share/NuGet/v3-cache
  • NUGET_HTTP_CACHE_PATH ortam değişkenini kullanarak geçersiz kılın.
Temp
  • Windows: %temp%\NuGetScratch
  • Mac: /tmp/NuGetScratch
  • Linux: /tmp/NuGetScratch<username>
  • NUGET_SCRATCH ortam değişkenini kullanarak geçersiz kılın.
  • plugins-cache4.8+
    • Windows: %localappdata%\NuGet\plugins-cache
    • Mac/Linux: ~/.local/share/NuGet/plugins-cache
    • NUGET_PLUGINS_CACHE_PATH ortam değişkenini kullanarak geçersiz kılın.

    NuGet genel paketler klasörünü kullanarak genellikle bilgisayarda zaten var olan paketlerin indirilmesini önleyerek yükleme, güncelleştirme ve geri yükleme işlemlerinin performansını artırır. PackageReference kullanılırken genel paketler klasörü, indirilen paketlerin yanlışlıkla kaynak denetimine eklenebileceği proje klasörleri içinde tutulmasını önler ve NuGet'in bilgisayar depolaması üzerindeki genel etkisini azaltır.

    Bir paketin alınması istendiğinde NuGet ilk olarak genel paketler klasörüne bakar. Paketin tam sürümü orada değilse, NuGet HTTP olmayan tüm paket kaynaklarını denetler. Paket hala bulunamazsa, --no-http-cache veya dotnet.exe-NoHttpCache komutları ile belirtmediğiniz sürece, NuGet paketi nuget.exe arar. Paket HTTP önbelleğinde değilse veya HTTP önbelleği kullanılmıyorsa NuGet paketi HTTP üzerinden alır.

    Daha fazla bilgi için bkz. Paket yüklendiğinde ne olur?.

    genel paketler

    Genel paketler klasörü, NuGet'in indirilen tüm paketleri yüklediği yerdir. Her paket, paket tanımlayıcısı ve sürüm numarasıyla eşleşen bir alt klasöre tamamen genişletilir. PackageReference biçimini kullanan projeler her zaman doğrudan bu klasörden paketleri kullanır. packages.configkullanılırken paketler genel paketler klasörüne yüklenir ve ardından projenin packages klasörüne kopyalanır.

    Genel paketler dizinini temizleme

    Artık kullanılmayan paketleri kaldırmak için genel paketler dizininin el ile temizlenmesi gerekir. Bunu komutuyla veya Visual Studio'nun seçeneklerindeki "NuGet yerel kaynaklarını temizle" düğmesiyle dotnet nuget locals global-packages --clear (ile eşdeğerdir dotnet nuget locals all --clear) yapabilirsiniz. Genel paketler dizinini temizledikten sonra, tüm gerekli paketleri yeniden indirebilmek için projelerinizi yeniden geri yüklemeniz gerekir. Visual Studio'da, NuGet'in "güncel geri yüklemeler" önbelleğini temizlemek için çözümünüzü yeniden yüklemeniz veya alternatif olarak ile msbuild -t:restore your.slnbir komut satırı geri yüklemesi (örneğin, Visual Studio'nun terminal penceresinde) yapmanız gerekebilir.

    Yalnızca kullanılmayan paketleri temizlemek iki adımlı bir işlemdir. İlk olarak, etkinleştirilmesi gereken bir nuget.config ayarı updatePackageLastAccessTime vardır. Bu ayar, NuGet'in geri yüklemede kullanıldığında her paketin .nupkg.metadata dosyasını güncelleştirmesine neden olur. Geri yükleme çalıştırıldığında ancak bir projenin zaten güncel olduğu kabul edildiğinde paket zaman damgaları güncelleştirilmez , bu nedenle projenin geri yükleme girişleri birkaç hafta boyunca değişmezse dosyalar .nupkg.metadata zaman damgalarını güncelleştirmez. Dosya .nupkg.metadata , NuGet'in bir geri yükleme veya yükleme sırasında paketleri indirirken ve ayıklarken oluşturacağı son dosyadır ve geri yüklemenin bir paketin başarıyla ayıklanıp ayıklanmadığını denetlemek için kullandığı dosyadır.

    İkinci olarak, temizleme işlemini gerçekleştirmek için bir araç çalıştırın. updatePackageLastAccessTime Ayar etkinleştirildikten sonra, düzenli olarak kullandığınız tüm paketlerin zaman damgalarının güncelleştirildiğinden emin olmak için birkaç gün beklemenizi öneririz.

    Şu anda NuGet bunu yapmak için bir araç veya komut sağlamaz. İlginizi çekebilmek için bu GitHub sorununa bir 👍 tepki ekleyebilirsiniz. Bazı topluluk üyeleri, arayabileceğiniz kendi açık kaynak NuGet temizleyici araçlarını oluşturmuştur.

    Kendi temizleme aracınızı yazacaksanız, diğer paket dosyalarından herhangi biri silinirse dosyanın silinmesi önemlidir .nupkg.metadata , bu nedenle önce bu dosyanın silinmesini öneririz. Aksi takdirde pakete başvuran projelerin beklenmeyen davranışları olabilir. .NET'te bir temizleme aracı yazıyorsanız, geri yükleme işleminin aynı anda ayıklamaya çalıştığı bir paketi silmekten kaçınmak için ConcurrencyUtilities.ExecuteWithFileLocked[Async](..) kullanmayı, sildiğiniz paket dizininin tam nupkg yolunu anahtar olarak geçirmeyi göz önünde bulundurun. Genel paketler dizini NuGet.Configuration paketiyle program aracılığıyla bulunabilir. Bir Settings.LoadDefaultSettings(path) örneğini elde etmek için ISettings kullanın (yolu null olarak geçebilirsiniz veya genel paketler dizinini yönlendiren bir nuget.config içeren çözümleri işlemek istiyorsanız bir dizini geçirebilirsiniz) ve ardından SettingsUtility.GetGlobalPackagesFolder(settings) kullanın. Alternatif olarak, dotnet nuget locals global-packages --list alt işlem olarak çalıştırabilir ve çıkışı ayrıştırabilirsiniz.

    HTTP önbelleği

    NuGet, her paket kaynağı için alt klasörler halinde düzenlenmiş çoğu NuGet akışı iletişiminin (arama hariç) kopyalarını önbelleğe alır. Paketler genişletilmemiştir ve son değiştirme tarihi 30 dakikadan eski olan dosyalar genellikle süresi dolmuş olarak kabul edilir.

    PackageReference geri yüklemesi, kaynağın içerdiği sürümlerin listesini önbelleğe alır. Bu nedenle, paketin yeni bir sürümü yayımlanırsa ve bunu 30 dakikalık önbellek süre sonu süresinden daha hızlı kullanmak istiyorsanız, daha yeni bir sürümü daha hızlı denetlemek için geri yüklemeyi zorlamak için http önbelleğini temizleyebilirsiniz.

    sıcaklık

    NuGet'in çeşitli işlemleri sırasında geçici dosyaları depoladığı bir klasör.

    Birden çok NuGet işlemi paralel olarak gerçekleştiriliyorsa (örneğin, birden çok CI aracısını çalıştıran tek bir makine), tüm işlemlerin aynı geçici (NuGetScratch) dizini paylaşması önemlidir. NuGet, dosya sistemi kilitlerini kullanarak http-cache ve genel paketler dizinlerine işlemler arası erişimi koordine etmek için geçici dizini kullanır. Farklı işlemler farklı geçici klasörler, ancak aynı genel paketler klasörü veya http-cache klasörü kullanıyorsa, paketleri geri yüklemeye veya yüklemeye çalışırken çeşitli hatalar oluşabilir. NuGet, geri yükleme projelerini koordine etmek için dosya sistemi kilitleme kullanmaz, bu nedenle aynı projeyi aynı anda geri yüklemeye çalışan iki farklı işlem, aynı NuGetScratch dizini kullanırken bile sorunlarla karşılaşabilir.

    eklenti önbelleği

    NuGet'in işlem talep isteğinden elde ettiği sonuçları depoladığı klasör. Daha fazla bilgi için platformlar arası eklentiler kılavuzuna bakın.

    Klasör konumlarını görüntüleme

    dotnet nuget locals komutunu kullanarak dizin konumlarını görüntüleyebilirsiniz:

    dotnet nuget locals all --list
    

    Tipik çıkış (Windows; "user1" geçerli kullanıcı adıdır:

    http-cache: C:\Users\user1\AppData\Local\NuGet\v3-cache
    global-packages: C:\Users\user1\.nuget\packages\
    temp: C:\Users\user1\AppData\Local\Temp\NuGetScratch
    plugins-cache: C:\Users\user1\AppData\Local\NuGet\plugins-cache
    

    Tipik çıkış (Mac; "user1" geçerli kullanıcı adıdır:

    info : http-cache: /home/user1/.local/share/NuGet/v3-cache
    info : global-packages: /home/user1/.nuget/packages/
    info : temp: /tmp/NuGetScratch
    info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
    

    Tipik çıkış (Linux; "user1" geçerli kullanıcı adıdır:

    info : http-cache: /home/user1/.local/share/NuGet/v3-cache
    info : global-packages: /home/user1/.nuget/packages/
    info : temp: /tmp/NuGetScratchuser1
    info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
    

    Tek bir klasörün konumunu görüntülemek için yerine , http-cache, global-packagesveya tempplugins-cachekullanınall.

    Ayrıca yerel ayarlar komutuyla NuGet.exe konumları görüntüleyebilirsiniz:

    # Display locals for all directories: global-packages, http-cache, temp and plugins-cache
    nuget locals all -list
    

    Yerel klasörleri temizleme

    Command-line

    Paket yükleme sorunlarıyla karşılaşıyorsanız veya uzak bir galeriden paketleri yüklediğinizden emin olmak istiyorsanız, temizlemek veya tüm klasörleri temizlemek için klasörü belirterek (dotnet.exe) veya locals --clearlocals -clear (nuget.exe) seçeneğini kullanınall:

    # Clear the HTTP cache (use either command)
    dotnet nuget locals http-cache --clear
    nuget locals http-cache -clear
    
    # Clear the global packages folder (use either command)
    dotnet nuget locals global-packages --clear
    nuget locals global-packages -clear
    
    # Clear the temporary cache (use either command)
    dotnet nuget locals temp --clear
    nuget locals temp -clear
    
    # Clear the plugins cache (use either command)
    dotnet nuget locals plugins-cache --clear
    nuget locals plugins-cache -clear
    
    # Clear all caches (use either command)
    dotnet nuget locals all --clear
    nuget locals all -clear
    

    Visual Studio

    Visual Studio, Araçlar > NuGet Paket Yöneticisi Paket Yöneticisi Ayarları menü komutu altında bulunan "NuGet Paket Yöneticisi>" seçeneklerindeki tüm yerel klasörlerin temizlenmesini destekler.

    Genel sayfasında NuGet yerel kaynaklarını temizle'yi seçin. Başlatıldıktan sonra bu eylem iptal edilemez. bir ilerleme çubuğu gösterilir ve komutun son durumunu içerir.

    "Paket Yöneticisi"nden çıkışı göster'i seçerken Çıkış Penceresi , tüm hata iletileri de dahil olmak üzere clear komutu hakkında ek ayrıntılar gösterir.

    NuGet seçeneklerinin Genel sayfasında vurgulanan NuGet yerel kaynaklarını temizle düğmesi

    Daha fazla bilgi için bkz. Visual Studio'da NuGet Seçenekleri.

    Hataları giderme

    nuget locals veya dotnet nuget locals kullanılırken aşağıdaki hatalar oluşabilir:

    • Hata: Başka bir işlem tarafından kullanıldığından veya Yerel kaynaklar temizlenemediğinden işlem dosya <paketine> erişemiyor: Bir veya daha fazla dosya silinemiyor

      Klasördeki bir veya daha fazla dosya başka bir işlem tarafından kullanılıyor; örneğin, genel paketler klasöründeki paketlere başvuran bir Visual Studio projesi açıktır. Bu işlemleri kapatın ve yeniden deneyin.

    • Hata: Yol <yoluna> erişim reddedildi veya Dizin boş değil

      Önbellekteki dosyaları silme izniniz yok. Mümkünse klasör izinlerini değiştirin ve yeniden deneyin. Aksi takdirde sistem yöneticinize başvurun.

    • Hata: Belirtilen yol, dosya adı veya her ikisi de çok uzun. Tam dosya adı 260 karakterden az ve dizin adı 248 karakterden az olmalıdır.

      Klasör adlarını kısaltın ve yeniden deneyin.