در دنیای توسعه نرمافزار با استفاده از پلتفرم .NET، مدیریت وابستگیها (Dependencies) از طریق NuGet به یک امر ضروری تبدیل شده است. NuGet به توسعهدهندگان اجازه میدهد تا به راحتی بستههای نرمافزاری مورد نیاز پروژههای خود را پیدا، نصب و مدیریت کنند. برای بهبود عملکرد و سرعت فرآیند نصب و بازیابی بستهها، NuGet از چندین لایه حافظه پنهان (Cache) محلی استفاده میکند. درک نحوه عملکرد و مدیریت این حافظههای پنهان میتواند به حل مشکلات احتمالی و بهینهسازی فرآیند توسعه کمک شایانی کند. این مقاله به بررسی جامع حافظههای پنهان NuGet و روشهای مدیریت آنها میپردازد.
انواع حافظههای پنهان NuGet
NuGet از چهار نوع اصلی حافظه پنهان محلی استفاده میکند که هر کدام نقش خاصی در فرآیند مدیریت بستهها ایفا میکنند:
حافظه پنهان بستههای سراسری (Global Packages Cache)
این حافظه پنهان، مکان اصلی ذخیرهسازی بستههای NuGet دانلود شده (.nupkg) است. هنگامی که یک بسته برای اولین بار به یک پروژه اضافه میشود، از منبع (به احتمال زیاد nuget.org) دانلود شده و در این مکان ذخیره میگردد. اگر بسته مشابهی در پروژههای دیگر روی همان دستگاه مورد نیاز باشد، NuGet آن را مستقیماً از این حافظه پنهان بازیابی میکند و نیازی به دانلود مجدد نیست. این امر به طور قابل توجهی در زمان و پهنای باند صرفهجویی میکند.
حافظه پنهان HTTP (HTTP Cache)
این حافظه پنهان برای نگهداری فراداده (Metadata) مربوط به بستههای دانلود شده استفاده میشود. این فراداده میتواند شامل اطلاعاتی درباره نسخهها، وابستگیها و سایر جزئیات مربوط به بستهها باشد. با ذخیرهسازی این اطلاعات به صورت محلی، NuGet میتواند به سرعت اطلاعات مربوط به بستهها را بازیابی کند بدون اینکه نیاز به برقراری ارتباط مجدد با منابع بسته باشد. محتویات این حافظه پنهان معمولاً به صورت فایلهای با پسوند .dat ذخیره میشوند که در واقع فایلهای JSON هستند.
حافظه پنهان افزونهها (Plugins Cache)
این حافظه پنهان برای ذخیرهسازی اطلاعات مربوط به افزونههای NuGet استفاده میشود. این اطلاعات میتواند شامل نتایج فراخوانیها، مسیرهای اجرایی و توکنهای اعتبارسنجی (Credential Tokens) برای منابع احراز هویت شده باشد. افزونهها قابلیتهای NuGet را گسترش میدهند و این حافظه پنهان به عملکرد کارآمدتر آنها کمک میکند.
حافظه پنهان موقت (Temp Cache)
این حافظه پنهان برای نگهداری فایلهای موقت و میانی در طول عملیات مختلف NuGet مانند بازیابی (Restore)، نصب (Install) و بستهبندی (Pack) استفاده میشود. این فایلها معمولاً پس از اتمام عملیات مربوطه حذف میشوند، اما ممکن است در صورت بروز خطا باقی بمانند.
مشاهده مسیرهای حافظه پنهان NuGet
برای مشاهده مسیرهای تمام حافظههای پنهان NuGet روی دستگاه خود، میتوانید از دستور زیر در خط فرمان .NET CLI (Command Line Interface) استفاده کنید:
dotnet nuget locals all --list
اجرای این دستور لیستی از مسیرهای مربوط به هر یک از حافظههای پنهان را نمایش میدهد. برای مثال، در یک سیستم macOS، خروجی ممکن است به شکل زیر باشد:
http-cache: /Users/rad/.local/share/NuGet/http-cache
global-packages: /Users/rad/.nuget/packages/
temp: /var/folders/q8/cdslzt2s6p1djnhp_y3ksc280000gn/T/NuGetScratch
plugins-cache: /Users/rad/.local/share/NuGet/plugin-cache
مدیریت حافظههای پنهان NuGet
با گذشت زمان، حجم حافظههای پنهان NuGet میتواند به طور قابل توجهی افزایش یابد. اگرچه این موضوع معمولاً مشکلی ایجاد نمیکند، اما در برخی موارد ممکن است لازم باشد حافظههای پنهان را پاک کنید. برای مثال، اگر با مشکلات مربوط به نصب یا بهروزرسانی بستهها مواجه هستید یا اگر گمان میکنید یک بسته خراب در حافظه پنهان وجود دارد، پاک کردن حافظه پنهان میتواند راه حل موثری باشد.
پاک کردن حافظه پنهان بستههای سراسری
برای پاک کردن حافظه پنهان بستههای سراسری، از دستور زیر استفاده کنید:
dotnet nuget locals global-packages --clear
پاک کردن حافظه پنهان HTTP
برای پاک کردن حافظه پنهان HTTP، از دستور زیر استفاده کنید:
dotnet nuget locals http-cache --clear
پاک کردن حافظه پنهان موقت
برای پاک کردن حافظه پنهان موقت، از دستور زیر استفاده کنید:
dotnet nuget locals temp --clear
پاک کردن تمام حافظههای پنهان
برای پاک کردن تمام حافظههای پنهان NuGet (شامل حافظه پنهان افزونهها)، از دستور زیر استفاده کنید:
dotnet nuget locals all --clear
توجه داشته باشید که هیچ دستور مستقیمی برای پاک کردن فقط حافظه پنهان افزونهها وجود ندارد و برای این کار باید از دستور پاک کردن تمام حافظههای پنهان استفاده کنید.
روش دستی پاک کردن حافظههای پنهان
علاوه بر استفاده از دستورات .NET CLI، شما میتوانید به صورت دستی نیز محتویات پوشههای حافظه پنهان را حذف کنید. برای این کار، ابتدا با استفاده از دستور dotnet nuget locals all --list مسیرهای حافظههای پنهان را پیدا کرده و سپس محتویات آن پوشهها را حذف نمایید. با این حال، استفاده از دستورات .NET CLI روشی امنتر و توصیه شدهتر است.
ملاحظات مربوط به پاک کردن حافظههای پنهان
به طور کلی، پاک کردن حافظههای پنهان NuGet مشکلی ایجاد نمیکند، زیرا این حافظهها در صورت نیاز مجدداً با دانلود یا بازیابی بستهها پر میشوند. با این حال، اگر در زمان پاک کردن حافظههای پنهان، یکی از منابع NuGet شما در دسترس نباشد، ممکن است در فرآیند بازیابی مجدد بستهها با مشکل مواجه شوید. بنابراین، اطمینان حاصل کنید که منابع NuGet مورد نیاز شما در دسترس هستند.
نتیجهگیری
مدیریت کارآمد حافظههای پنهان NuGet نقش مهمی در بهبود فرآیند توسعه با استفاده از پلتفرم .NET دارد. درک انواع مختلف حافظههای پنهان، نحوه عملکرد آنها و روشهای پاک کردن آنها به توسعهدهندگان کمک میکند تا مشکلات مربوط به مدیریت بستهها را به طور موثرتری حل کنند و فرآیند توسعه روانتری را تجربه نمایند. استفاده از دستورات .NET CLI ابزاری قدرتمند برای مدیریت این حافظههای پنهان است و به توسعهدهندگان امکان کنترل بیشتری بر محیط توسعه خود میدهد.