عنوان:

‫معرفی ابزار dotnetup؛ ابزار رسمی و جدید مایکروسافت برای مدیریت زنجیره ابزار (Toolchain Management) در دات‌نت


نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۳/۲۵ ۰۹:۰۰
آدرس: www.dntips.ir
استفاده از ابزار جدید dotnetup (که مایکروسافت اخیراً در کنفرانس Build 2026 از آن رونمایی کرد) یک موضوع بسیار جذاب، به‌روز و کاربردی برای توسعه‌دهندگان دات‌نت است. این ابزار که نقشی مشابه rustup در زبان راس یا nvm در نود.جی‌اس را ایفا می‌کند، قرار است چالش‌های همیشگی مدیریت نسخه‌های مختلف SDK و Runtime را در سیستم‌عامل‌های مختلف (بدون نیاز به دسترسی Administrator/Sudo) حل کند.


بخش ۱: آشنایی با مفاهیم پایه‌ای و ضرورت ابزارdotnetup

در ادامه می‌خواهیم به این سؤال پاسخ دهیم که چرا مایکروسافت به فکر ساخت این ابزار افتاد و این ابزار قرار است چه کابوسی را از شب‌های توسعه‌دهندگان دات‌نت پاک کند!

۱-۱: مشکل اساسی چه بود؟ (چالش‌های سنتی مدیریت دات‌نت)
تا پیش از معرفی dotnetup در کنفرانس Build 2026، مدیریت نسخه‌های دات‌نت روی سیستم توسعه‌دهندگان شبیه به یک کلاف سردرگم بود. بیایید اعتراف کنیم که همه ما حداقل یک‌بار با خطاهای عجیب و غریب نسخه SDK مواجه شده‌ایم.
چالش‌های اصلی روش سنتی:
  • کابوس دسترسی Administrator و Sudo: برای نصب یا آپدیت یک SDK ساده، همیشه باید دسترسی ادمین (در ویندوز) یا دستور sudo (در لینوکس/مک) می‌داشتیم. این موضوع در شرکت‌های بزرگ با قوانین سخت‌گیرانه IT، پروسه آپدیت را هفته‌ها عقب می‌انداخت.
  • تداخل نسخه‌ها (Version Hell): نصب یک نسخه جدید از دات‌نت (به خصوص نسخه‌های Preview) گاهی اوقات باعث می‌شد پروژه‌های قدیمی‌تر که به نسخه خاصی از SDK نیاز داشتند، دیگر کامپایل نشوند.
  • اسکریپت‌های نصب ناپایدار: استفاده از اسکریپت‌های رسمی dotnet-install.ps1 یا dotnet-install.sh اگرچه راه‌گشا بود، اما مدیریت متغیرهای محیطی (PATH و DOTNET_ROOT) را به عهده خود کاربر می‌گذاشت که معمولاً منجر به اشتباه می‌شد.
  • حجم بسیار بالای نصب‌های سراسری: سیستم‌عامل پر می‌شد از SDKهای قدیمی و بلااستفاده‌ای که پاک کردن تک‌تک آن‌ها کار حضرت فیل بود!

۱-۲:dotnetupچیست؟ (فلسفه وجودی)
ابزار dotnetup ابزار رسمی و جدید مایکروسافت برای مدیریت زنجیره ابزار (Toolchain Management) در دات‌نت است. فلسفه وجودی این ابزار در سه کلمه خلاصه می‌شود: سادگی، استقلال و سرعت.
تعریف رسمی:dotnetup یک ابزار خط فرمان (CLI) سبک است که به توسعه‌دهنده اجازه می‌دهد چندین نسخه مختلف از SDKها و Runtimeهای دات‌نت را به صورت کاملاً ایزوله، بدون نیاز به دسترسی ادمین و به صورت محلی (User-local) نصب، مدیریت و سوییچ کند.
هدف اصلی مایکروسافت این است که توسعه‌دهنده بدون درگیر شدن با نصاب‌های حجیم (Installers)، تنها با نوشتن چند کلمه در ترمینال، محیط توسعه خود را برای هر پروژه‌ای آماده کند.

۱-۳: تفاوت نصب سیستم‌عامل (System-global) و نصب محلی (User-local)
بزرگ‌ترین تغییر پارادایمی که با dotnetup رخ می‌دهد، محل و نحوه نصب دات‌نت است. بیایید این دو رویکرد را مقایسه کنیم:

ویژگیروش سنتی (System-global)روش جدید با dotnetup (User-local)
محل نصبپوشه‌های سیستمی مانند C:\Program Files\dotnet یا /usr/share/dotnetپوشه شخصی کاربر مانند ~/.dotnet/ یا LocalAppData
نیاز به دسترسی Admin/Sudoبله (اجباری)خیر (کاملاً بی‌نیاز)
تأثیر روی سایر کاربران سیستمتغییرات روی تمام کاربران و سرویس‌های سیستم اعمال می‌شود.تغییرات فقط و فقط مختص کاربر فعلی است.
امنیتبالا رفتن ریسک با دادن دسترسی روت به اسکریپت‌ها.امنیت بسیار بالا به دلیل اجرا در لایه کاربر.
با این حساب، شما می‌توانید روی لپ‌تاپ شرکت بدون نیاز به زنگ زدن به پشتیبانی IT، جدیدترین نسخه دات‌نت Preview را نصب و تست کنید!

۱-۴: مقایسه اکوسیستمی (چرا این یک ایده انقلابی در دات‌نت است؟)
اگر با زبان‌های برنامه‌نویسی دیگر کار کرده باشید، قطعاً این ایده برایتان آشناست. مایکروسافت چرخ را از اول اختراع نکرده، بلکه یکی از بهترین الگوهای دنیای نرم‌افزار را به دات‌نت آورده است.
  • مقایسه با Rust (rustup): ابزار dotnetup مستقیماً الهام گرفته از ابزار فوق‌العاده محبوب rustup در زبان راس است. همان‌طور که در راس با یک دستور بین نسخه‌های Stable و Nightly سوییچ می‌کنید، اینجا هم همین تجربه را خواهید داشت.
  • مقایسه با Node.js (nvm یا fnm): در دنیای جاوااسکریپت، مدیریت نسخه‌های Node بدون NVM غیرممکن است. dotnetup نقش NVM را برای جهان دات‌نت ایفا می‌کند.

نتیجه‌گیری: دات‌نت با معرفی این ابزار، یک گام بزرگ به سمت مدرن‌تر شدن و نزدیک شدن به استانداردهای محبوب توسعه‌دهندگان در لینوکس و مک برداشته است. در بخش بعدی، آستین‌ها را بالا می‌زنیم و این ابزار را روی سیستم نصب می‌کنیم.

نظرات

  • وحید نصیری در ۱۴۰۵/۰۳/۲۵ ۰۹:۰۹
    بخش ۲: نصب و راه‌اندازی اولیه (Installation & Initialization)
    در این بخش می‌خواهیم ابزار dotnetup را روی سیستم‌عامل‌های مختلف نصب کنیم و با مکانیزم راه‌اندازی اولیه آن آشنا شویم. از این‌جا به بعد، ترمینال (Terminal) یا پاورشل (PowerShell) ابزار اصلی ما خواهد بود.

    ۲-۱: نصب ابزار در ویندوز (Windows)
    در ویندوز، مایکروسافت دو راهکار اصلی برای نصب dotnetup پیش روی ما گذاشته است: استفاده از مدیر بسته محبوب Winget یا استفاده از اسکریپت مستقیم PowerShell.
    یادآوری مهم: برای هیچ‌کدام از این روش‌ها نیازی به باز کردن ترمینال به صورت Run as Administrator ندارید!

    روش اول: استفاده از Winget (توصیه شده)
    کافی است یک ترمینال استاندارد باز کنید و دستور زیر را تایپ کنید:
    winget install Microsoft.DotNetUp

    روش دوم: اسکریپت مستقیم PowerShell
    اگر به وینگت دسترسی ندارید، می‌توانید اسکریپت نصب را مستقیماً از سرورهای مایکروسافت دانلود و اجرا کنید:
    irm https://dotnet.microsoft.com/download/dotnetup/install.ps1 | iex

    ۲-۲: نصب ابزار در مک (macOS) و لینوکس (Linux)
    برای کاربران مک و لینوکس، راه‌اندازی dotnetup از طریق اسکریپت شل (sh) یا برای مک از طریق ابزار Homebrew بسیار ساده است.
    روش اول: استفاده از Homebrew (مخصوص macOS)
    brew install dotnetup

    روش دوم: اسکریپت نصب یکپارچه (توصیه شده برای لینوکس و مک)
    یک ترمینال باز کنید و دستور زیر را اجرا کنید. این اسکریپت به طور خودکار معماری پردازنده شما (تفاوت بین x64 و ARM64/Apple Silicon) را تشخیص می‌دهد:
    curl --proto '=https' --tlsv1.2 -sSf https://dotnet.microsoft.com/download/dotnetup/install.sh | sh

    ۲-۳: بررسی فرآیند Setup تعاملی (Interactive Setup)
    بلافاصله پس از اتمام دانلود، dotnetup یک فرآیند نصب تعاملی و متنی را در داخل ترمینال آغاز می‌کند. این فرآیند از شما چند سؤال ساده می‌پرسد:
    • انتخاب مسیر نصب (Installation Path): به طور پیش‌فرض، ابزار پوشه شخصی شما را پیشنهاد می‌دهد:
    • ویندوز:C:\Users\
    • مک و لینوکس:~/.dotnetup/
    • تأیید دسترسی‌ها: ابزار مجدداً به شما یادآوری می‌کند که برای این نصب نیازی به سطح دسترسی روت یا ادمین نیست.
    • موافقت با جمع‌آوری داده‌های آماری (Telemetry): مانند خود دات‌نت، می‌توانید این گزینه را فعال یا غیرفعال کنید.
    پس از تایید (با فشردن کلید Enter)، فایل‌های باینری ابزار در مسیر مشخص شده قرار می‌گیرند.

    ۲-۴: تنظیمات Shell و متغیرهای محیطی (مفهومinitوprintm)
    تا این‌جای کار ابزار دانلود شده است، اما سیستم‌عامل هنوز نمی‌داند دستور dotnetup یا دستورات خود دات‌نت (dotnet) کجا هستند. این‌جاست که جادوی اصلی اتفاق می‌افتد.

    دستورdotnetup init
    این دستور در پایان فرآیند نصب به طور خودکار اجرا می‌شود (یا می‌توانید خودتان آن را دستی بنویسید). کار این دستور چیست؟
    • در ویندوز: مسیر دایرکتوری باینری dotnetup را به Environment Variables کاربر (نه سیستم) اضافه می‌کند.
    • در لینوکس و مک: خطوط لازم برای شناسایی ابزار را به فایل کانفیگ شل شما (مانند .bashrc یا .zshrc) اضافه می‌کند.

    اسکریپت و متغیرprintm(Print Mechanism)
    یکی از چالش‌های بزرگ ابزارهای مدیریت نسخه، آپدیت کردن متغیرهای محیطی PATH و DOTNET_ROOT در ترمینال فعلی (بدون بستن و باز کردن مجدد آن) است. dotnetup برای حل این مشکل از مکانیزم printm استفاده می‌کند.
    هنگامی که شل خود را باز می‌کنید، dotnetup به طور هوشمند بررسی می‌کند که کدام نسخه از دات‌نت باید فعال باشد و خروجی متغیرها را مستقیماً به محیط ترمینال شما تزریق می‌کند.

    تست موفقیت‌آمیز بودن نصب
    برای اینکه مطمئن شوید همه چیز به درستی کار می‌کند، ترمینال خود را یک‌بار ببندید و دوباره باز کنید، سپس دستور زیر را تایپ کنید:
    dotnetup --version
    اگر شماره نسخه ابزار را مشاهده کردید، تبریک می‌گوییم! شما آماده‌اید تا در بخش بعدی، اولین SDK دات‌نت خود را با این ابزار مدیریت کنید.
  • وحید نصیری در ۱۴۰۵/۰۳/۲۵ ۰۹:۱۴
    بخش ۳: مدیریت کاربردی SDKها و Runtimeها (دستورات اصلی)
    حالا که dotnetup را با موفقیت نصب و راه‌اندازی کرده‌ایم، وقت آن است که به سراغ کار اصلی برویم: مدیریت، نصب و به‌روزرسانی نسخه‌های مختلف دات‌نت. در این بخش با دستورات روزمره و کلیدی این ابزار آشنا خواهید شد.

    ۳-۱: جستجو و لیست کردن نسخه‌ها (دستورlist)
    قبل از اینکه هر چیزی را نصب کنیم، باید بدانیم چه نسخه‌هایی از دات‌نت در سرورهای مایکروسافت موجود است و چه نسخه‌هایی در حال حاضر روی سیستم ما نصب شده‌اند.

    ۱. مشاهده نسخه‌های نصب‌شده روی سیستم:
    برای اینکه ببینید در حال حاضر چه نسخه‌هایی توسط dotnetup روی کامپیوتر شما مدیریت می‌شوند، از دستور زیر استفاده کنید:
    dotnetup list
    نکته: این دستور فهرستی از SDKها و ران‌تایم‌های محلی شما را نشان می‌دهد و با یک علامت ستاره (*) نسخه فعال فعلی (Active) را مشخص می‌کند.

    ۲. جستجوی نسخه‌های موجود در سرورهای مایکروسافت:
    برای دیدن تمام نسخه‌های قابل دانلود (شامل نسخه‌های پایدار/Stable و پیش‌نمایش/Preview)، دستور زیر را تایپ کنید:
    dotnetup list --remote
    همچنین می‌توانید خروجی را محدود به کانال‌های خاصی کنید. برای مثال، برای دیدن فقط نسخه‌های با پشتیبانی بلندمدت (LTS):
    dotnetup list --remote --lts

    ۳-۲: مدیریت SDKها (نصب، ارتقا و حذف)
    اساسی‌ترین وظیفه dotnetup مدیریت SDKها (Software Development Kits) است که برای کامپایل و ساخت برنامه‌ها به آن‌ها نیاز داریم.

    ۱. نصب یک نسخه مشخص از SDK:
    برای نصب یک نسخه خاص، کافیست دستور install را همراه با شماره نسخه بنویسید:
    dotnetup install sdk 8.0.401
    اگر می‌خواهید آخرین نسخه پایدار از یک کانال خاص (مثلاً دات‌نت ۱۰ یا ۱۱) را نصب کنید، نیازی به نوشتن ریزِ نسخه نیست:
    dotnetup install sdk 10.0

    ۲. حذف یک SDK اضافه:
    اگر به یک نسخه قدیمی دیگر نیاز ندارید و می‌خواهید فضای دیسک خود را آزاد کنید، به سادگی دستور زیر را اجرا کنید:
    dotnetup uninstall sdk 8.0.401

    درس ۳-۳: مدیریت مستقل Runtimeها (دستورruntime)
    گاهی اوقات شما روی یک سیستم (مانند سرورهای تست یا سیستم یک پلتفرم خاص) نیازی به کل ابزارهای SDK ندارید و فقط می‌خواهید برنامه دات‌نتی خود را اجرا کنید. در این حالت، به جای دانلود صدها مگابایت SDK، فقط Runtime را نصب می‌کنید.

    ۱. نصب ران‌تایم پایه (Core Runtime):
    dotnetup install runtime 10.0

    ۲. نصب ران‌تایم‌های تخصصی:
    برنامه‌های دات‌نت ممکن است به ویژگی‌های خاصی نیاز داشته باشند. با dotnetup می‌توانید ران‌تایم‌های تخصصی را هم مدیریت کنید:
    • برای برنامه‌های وب (ASP.NET Core Runtime):
    dotnetup install runtime aspnetcore 10.0
    • برای برنامه‌های دسکتاپ ویندوز (Windows Desktop Runtime):
    dotnetup install runtime desktop 10.0

    ۳-۴: به‌روزرسانی یکپارچه (دستورupdate)
    یکی از جذاب‌ترین ویژگی‌های dotnetup که شما را از چک کردن مدام سایت مایکروسافت خلاص می‌کند، قابلیت آپدیت هوشمند است. دیگر نیازی نیست برای هر پچ امنیتی جدید، کل پروسه دانلود را از اول طی کنید.

    به‌روزرسانی تمام ابزارها با یک دستور:
    کافیست دستور زیر را وارد کنید تا dotnetup ابتدا خودش را به‌روز کند و سپس تمام SDKها و Runtimeهای نصب شده روی سیستم شما را به آخرین پچ‌های امنیتی و پایدار ارتقا دهد:
    dotnetup update
    اگر می‌خواهید فقط یک کانال خاص (مثلاً دات‌نت ۱۱) آپدیت شود:
    dotnetup update --channel 11.0

    نتیجه‌گیری: در این بخش یاد گرفتیم چگونه مانند یک حرفه‌ای و تنها با چند دستور ساده در ترمینال، کنترل کامل نسخه‌های دات‌نت سیستم خود را به دست بگیریم. در بخش چهارم به سراغ قابلیت‌های پیشرفته‌تر می‌رویم؛ جایی که یاد می‌گیریم چگونه بدون دست زدن به تنظیمات سیستم، پروژه‌های مختلف را با نسخه‌های متفاوتی از دات‌نت مدیریت و اجرا کنیم.
  • وحید نصیری در ۱۴۰۵/۰۳/۲۵ ۰۹:۱۸
    بخش ۴: مدیریت پیشرفته پروژه‌ها و نسخه‌های سازمانی
    تا این‌جا یاد گرفتیم که چگونه نسخه‌های مختلف دات‌نت را نصب و آپدیت کنیم. اما در دنیای واقعی و پروژه‌های سازمانی، چالش اصلی این است: «من یک پروژه قدیمی دارم که با دات‌نت ۸ کار می‌کند و یک پروژه جدید که با دات‌نت ۱۱ نوشته شده است؛ چگونه بدون به‌هم ریختن سیستم، بین آن‌ها سوییچ کنم؟»
    در این بخش به سراغ تکنیک‌های پیشرفته dotnetup برای حل این چالش‌ها می‌رویم.

    ۴-۱: تغییر نسخه در لحظه و تک‌دستوری (One-shot Execution)
    گاهی اوقات شما نمی‌خواهید نسخه پیش-فرض سیستم خود را تغییر دهید، اما فقط برای اجرای یک دستور خاص (مثلاً ساخت یک پکیج یا تست یک پروژه قدیمی) نیاز به یک نسخه دیگر از دات‌نت دارید. ابزار dotnetup برای این کار ویژگی فوق‌العاده‌ای به نام One-shot Execution یا اجرای تک-مرحله‌ای دارد که از طریق دستور واسط netup.net یا سوئیچ --with انجام می‌شود.
    مثال عملی: فرض کنید نسخه پیش‌فرض سیستم شما دات‌نت ۱۱ است، اما می‌خواهید یک پروژه را با دات‌نت ۸.۰ کامپایل کنید. بدون تغییر کانفیگ سیستم، کافیست بنویسید:
    dotnetup run --with 8.0.401 -- dotnet build
    تحلیل دستور: این دستور در یک محیط کاملاً ایزوله و موقت (Sandbox)، متغیرهای محیطی را روی دات‌نت ۸ تنظیم کرده، دستور dotnet build را اجرا می‌کند و پس از پایان کار، دوباره سیستم را به حالت دات‌نت ۱۱ برمی‌گرداند.

    ۴-۲: تعامل هوشمند باglobal.json
    در اکوسیستم دات‌نت، فایل global.json ابزاری سنتی برای قفل کردن نسخه SDK در یک پوشه یا پروژه است. خبر خوب این است که dotnetup کاملاً با این مکانیزم هماهنگ و یکپارچه (Integrated) است.

    سوییچ خودکار (Automatic Switching):
    وقتی شما با ترمینال وارد پوشه یک پروژه می‌شوید، dotnetup به طور هوشمند فایل global.json آن پوشه را اسکن می‌کند.
    • اگر نسخه ذکر شده در فایل را قبلاً نصب کرده باشید، dotnetup به طور خودکار متغیرهای محیطی ترمینال فعلی شما را به آن نسخه تغییر می‌دهد.
    • اگر آن نسخه روی سیستم شما وجود نداشته باشد، به جای نمایش خطاهای مبهم کامپایلر، با یک پیغام واضح به شما پیشنهاد می‌دهد که آن را نصب کنید:
    Warning: The required SDK version (8.0.200) in global.json is not installed.
    Run 'dotnetup install' to resolve this automatically.
    حتی می‌توانید با خود این ابزار، فایل global.json را تولید کنید:
    dotnetup pin 10.0
    این دستور یک فایل global.json در پوشه فعلی ایجاد می‌کند که نسخه آن روی دات‌نت ۱۰ قفل شده است.

    ۴-۳: حل چالش تداخل با Visual Studio و نصب‌های سیستمی
    یکی از بزرگ‌ترین دغدغه‌های توسعه‌دهندگان ویندوز این است: «اگر من dotnetup را نصب کنم، چه بلایی سر دات‌نت‌هایی که ویژوال استودیو نصب کرده می‌آید؟»
    مایکروسافت ابزار dotnetup را به گونه‌ای طراحی کرده که کمترین تداخل را داشته باشد:

    مکانیزم اولویت‌بندی (Shadowing):
    ۱. ویژوال استودیو همچنان کار خود را در مسیر سیستمی (C:\Program Files\dotnet) انجام می‌دهد و آپدیت‌های خود را از طریق Visual Studio Installer دریافت می‌کند.
    ۲. زمانی که شما ترمینال را باز می‌کنید، dotnetup مسیرهای محلی خود (User-local) را در ابتدای متغیر PATH قرار می‌دهد. این یعنی در ترمینال، حرف اول و آخر را dotnetup می‌زند.
    ۳. برجسته‌سازی یا Shadowing: اگر شما دستوری را در ترمینال اجرا کنید، dotnetup ابتدا به پوشه محلی خود نگاه می‌کند؛ اگر نسخه مورد نظر را پیدا نکند، به عنوان لایه پشتیبان (Fallback)، به سراغ دات‌نت نصب‌شده توسط ویژوال استودیو در سیستم می‌رود.

    ۴-۴: سوییچ دستی بین نسخه‌های اصلی (دستورswitch)
    اگر می‌خواهید به طور کلی نسخه پیش‌فرض ترمینال کاربر خود را تغییر دهید (بدون استفاده از فایل کانفیگ پروژه)، از دستور switch یا default استفاده می‌کنید.
    تغییر نسخه پیش‌فرض سراسری برای کاربر فعلی:
    dotnetup default sdk 10.0
    از این لحظه به بعد، در هر ترمینال جدیدی که باز کنید، دستور dotnet --version خروجی نسخه ۱۰ را به شما نشان خواهد داد، مگر اینکه در پوشه‌ای باشید که global.json آن را بازنویسی (Override) کند.

    نتیجه‌گیری: حالا شما می‌توانید بدون ترس از خراب شدن پروژه‌های شرکتی، جدیدترین نسخه‌های Preview دات‌نت را آزمایش کنید و در ثانیه بین پروژه‌های مختلف جابه‌جا شوید. در بخش پنجم و پایانی این سری، به سراغ سناریوهای عیب‌یابی و استفاده از این ابزار در فرآیندهای CI/CD و اتوماسیون خواهیم رفت.
  • وحید نصیری در ۱۴۰۵/۰۳/۲۵ ۰۹:۲۴
    بخش ۵: عیب‌یابی (Troubleshooting) و استفاده در CI/CD
    تا این‌جا تمام کارهای لازم برای مدیریت دات‌نت در سیستم توسعه‌دهنده (Local) را یاد گرفته‌ایم. اما برای این‌که به یک متخصص تمام‌عیار تبدیل شویم، باید بدانیم در مواجهه با خطاهای احتمالی چه کنیم و چگونه این ابزار را در سرورهای Build و فرآیندهای CI/CD به کار بگیریم.

    ۵-۱: حل مشکلات رایج متغیرهای محیطی (DOTNET_ROOTوPATH)
    بیش از ۹۰٪ مشکلاتی که توسعه‌دهندگان پس از نصب dotnetup با آن مواجه می‌شوند، به هم ریختن متغیرهای محیطی (Environment Variables) است.

    مشکل ۱: خطای "Command not found" یا عدم تغییر نسخه در ترمینال
    اگر دستوری را تغییر می‌دهید اما dotnet --version همچنان نسخه قدیمی را نشان می‌دهد، یا اصلاً دستور دات‌نت شناخته نمی‌شود:
    • علت: ترتیب متغیر PATH در سیستم شما به هم خورده است و مسیر سیستمی دات‌نت (مثل C:\Program Files\dotnet) قبل از مسیر dotnetup قرار دارد.
    • راهکار: دستور زیر را اجرا کنید تا dotnetup به طور خودکار فایل‌های کانفیگ شل یا رجیستری ویندوز را اسکن و اصلاح کند:

    dotnetup doctor
    دستور dotnetup doctor ابزار اختصاصی عیب‌یابی است که وضعیت سلامت نصب، متغیرهای محیطی و دسترسی‌های پوشه‌ها را بررسی و به صورت خودکار تعمیر می‌کند.

    مشکل ۲: خطای عدم شناسایی ران‌تایم توسط برنامه‌های اجرایی (خطای DOTNET_ROOT)
    گاهی ابزارهای جانبی یا IDEها برای اجرای برنامه‌ها به متغیر DOTNET_ROOT نگاه می‌کنند. اگر این متغیر به پوشه سیستمی قدیمی اشاره کند، برنامه‌ها کرش می‌کنند.
    راهکار: اطمینان حاصل کنید که خروجی دستور زیر در پروفایل شل شما (مانند .zshrc یا .bashrc) به درستی Load می‌شود:
    dotnetup env
    این دستور مسیر دقیق و محلیِ نسخه فعال فعلی را چاپ می‌کند تا ابزارهای دیگر بتوانند از آن استفاده کنند.

    ۵-۲: یکپارچه‌سازی در Build Scriptها و فرآیندهای CI/CD
    یکی از پتانسیل‌های فوق‌العاده dotnetup استفاده از آن در خط لوله‌های اتوماسیون (Pipelines) است. به جای نوشتن اسکریپت‌های پیچیده برای دانلود دات‌نت در داکر یا سرورهای Build، می‌توانید از سرعت و سادگی dotnetup استفاده کنید.

    مثال ۱: استفاده در GitHub Actions
    شما می‌توانید در مراحلی که نیاز به تست پروژه با نسخه‌های مختلف (مثلاً نسخه‌های خط مقدم یا Preview دات‌نت) دارید، به این صورت عمل کنید:
    - name: Install dotnetup & Global Toolchain
      run: |
        curl -sSf https://dotnet.microsoft.com/download/dotnetup/install.sh | sh
        source $HOME/.bashrc
        dotnetup install sdk 11.0
        dotnetup default sdk 11.0
    
    - name: Build and Test
      run: dotnet test MyProject.sln
    مزیت کلیدی در CI/CD:
    به دلیل عدم نیاز به دسترسی sudo یا ادمین، کانتینرها (Containers) یا Runnerهای شما با کمترین سطح دسترسی امنیتی (Non-root user) می‌توانند پلتفرم دات‌نت را دانلود، آپدیت و اجرا کنند که این یک امتیاز بزرگ برای تیم‌های SecOps است.

    ۵-۳: امنیت، امضای دیجیتال و کنترل اصالت (Checksum)
    در محیط‌های سازمانی و بانکی، دانلود مستقیم فایل از اینترنت بدون تایید اصالت ممنوع است. dotnetup با در نظر گرفتن این دغدغه امنیتی ساخته شده است.

    مکانیزم تایید اصالت (Verification):
    زمانی که شما دستور dotnetup install را اجرا می‌کنید، ابزار به طور خودکار مراحل زیر را طی می‌کند:
    ۱. فایل باینری SDK یا Runtime را دانلود می‌کند.
    ۲. فایل امضای دیجیتال (.sha512 یا کلیدهای GPG مایکروسافت) مربوط به آن نسخه را به صورت مجزا دریافت می‌کند.
    ۳. قبل از خارج کردن فایل از حالت فشرده (Extract)، Checksum فایل دانلود شده را با امضای رسمی مایکروسافت مطابقت می‌دهد.
    اگر به هر دلیلی (مثل حملات مرد میانی یا خرابی شبکه) فایل دستکاری شده باشد، dotnetup با نمایش خطای امنیتی زیر، پروسه را متوقف می‌کند:
    Error: Checksum verification failed for SDK 10.0.100. 
    The file may have been corrupted or tampered with. Installation aborted.

    ۵-۴: جمع‌بندی و گام‌های بعدی
    به پایان سری آموزشی ابزار dotnetup رسیدیم. در این سلسله مطالب آموختیم که چگونه:
    • از شر چالش‌های سنتی نصب دات‌نت و نیاز به دسترسی ادمین خلاص شویم.
    • نسخه‌های مختلف را به صورت موازی و بدون تداخل مدیریت کنیم.
    • با استفاده از global.json و تکنیک‌های اجرای تک-دستوری، پروژه‌های سازمانی را مدیریت کنیم.
    • و در نهایت، مشکلات محیطی را عیب‌یابی کرده و ابزار را به دنیای CI/CD ببریم.
    اکنون نوبت شماست که ترمینال خود را باز کنید، با دستور dotnetup doctor از سلامت سیستم خود مطمئن شوید و مدیریت مدرن دات‌نت را آغاز کنید!