عنوان:

‫بازیابی و مدیریت بسته‌های NuGet بدون دسترسی به اینترنت


نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۳/۱۱ ۰۸:۳۰
آدرس: www.dntips.ir
یکی از چالش‌های رایج توسعه‌دهندگان دات‌نت، به‌ویژه در محیط‌های بدون دسترسی به اینترنت یا شبکه‌های محدود، بازیابی و مدیریت بسته‌های NuGet است. وقتی اتصال به اینترنت وجود ندارد، اما کش محلی NuGet در سیستم موجود است، می‌توان با استفاده هوشمندانه از این کش، پروژه را بدون نیاز به دانلود مجدد بسته‌ها، بازیابی و build کرد.
این مقاله به صورت جامع و کاربردی به بررسی راهکارهای مدیریت کش محلی NuGet می‌پردازد تا توسعه‌دهندگان بتوانند در شرایط آفلاین با اطمینان بیشتری کار کنند.

توضیح و راهکارهای عملی
۱. مشاهده مکان‌های کش NuGet
ابتدا باید بدانید بسته‌ها دقیقاً در کجا ذخیره شده‌اند. دستور زیر تمام مکان‌های کش را نمایش می‌دهد:
dotnet nuget locals all --list
خروجی مهم‌ترین بخش آن معمولاً به این شکل است:
  • global-packages: محل اصلی ذخیره‌سازی بسته‌های دانلود شده (مهم‌ترین مسیر)
  • http-cache: کش متادیتا و درخواست‌های HTTP
  • temp: فایل‌های موقتی
مسیر پیش‌فرض global-packages معمولاً به این شکل است: C:\Users\نام کاربری\.nuget\packages

۲. بازیابی بسته‌ها بدون اینترنت (Restore آفلاین)
برای اینکه dotnet فقط از کش محلی استفاده کند، از دستور زیر استفاده کنید:
dotnet restore --source "C:\Users\نام کاربری\.nuget\packages" --no-http-cache
اگر می‌خواهید این منبع را به صورت دائمی اضافه کنید:
dotnet nuget add source "C:\Users\نام کاربری\.nuget\packages" --name LocalCache
پس از اضافه کردن منبع، دستور restore ساده‌تر خواهد شد:
dotnet restore

۳. مدیریت و پاک‌سازی کش
NuGet ابزارهای مناسبی برای مدیریت فضای اشغالی کش ارائه می‌دهد:
# مشاهده همه کش‌ها
dotnet nuget locals all --list

# پاک کردن همه کش‌ها
dotnet nuget locals all --clear

# پاک کردن فقط global-packages
dotnet nuget locals global-packages --clear
توصیه: پاک کردن global-packages فضای زیادی آزاد می‌کند، اما باعث می‌شود در اولین restore بعدی، بسته‌ها دوباره نیاز به منبع داشته باشند (که در حالت آفلاین مشکل‌ساز خواهد بود).
برای حذف انتخابی یک بسته خاص، کافی است فولدر مربوط به آن را از مسیر global-packages به صورت دستی حذف کنید.

۴. تغییر مکان کش (بهینه‌سازی فضای دیسک)
اگر فضای درایو C: محدود است، می‌توانید مکان کش را به درایو دیگری منتقل کنید. بهترین روش استفاده از متغیر محیطی است:
setx NUGET_PACKAGES "D:\NuGetPackages"
یا از طریق فایل NuGet.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="globalPackagesFolder" value="D:\NuGetPackages" />
  </config>
</configuration>

۵. فایل پیکربندی NuGet.Config
برای مدیریت بهتر منابع در سطح پروژه یا کاربر، فایل NuGet.Config را در ریشه پروژه یا فولدر کاربر ایجاد کنید:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="LocalCache" value="C:\Users\نام کاربری\.nuget\packages" />
  </packageSources>
</configuration>

نتیجه‌گیری
مدیریت صحیح کش محلی NuGet، یکی از مهارت‌های مهم و کاربردی هر توسعه‌دهنده دات‌نت حرفه‌ای است. با استفاده از دستورات dotnet nuget locals، منبع محلی و فایل‌های پیکربندی، می‌توان حتی در محیط‌های کاملاً آفلاین نیز پروژه‌ها را به سرعت restore کرد و از اتلاف زمان و پهنای باند جلوگیری نمود. تسلط بر این موضوع نه تنها بهره‌وری شما را در شرایط محدود افزایش می‌دهد، بلکه درک عمیق‌تری از نحوه کارکرد سیستم مدیریت بسته دات‌نت به شما خواهد داد.