معرفی ابزار dotnetup؛ ابزار رسمی و جدید مایکروسافت برای مدیریت زنجیره ابزار (Toolchain Management) در داتنت
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۳/۲۵ ۰۹:۰۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
dotnetup (که مایکروسافت اخیراً در کنفرانس Build 2026 از آن رونمایی کرد) یک موضوع بسیار جذاب، بهروز و کاربردی برای توسعهدهندگان داتنت است. این ابزار که نقشی مشابه rustup در زبان راس یا nvm در نود.جیاس را ایفا میکند، قرار است چالشهای همیشگی مدیریت نسخههای مختلف SDK و Runtime را در سیستمعاملهای مختلف (بدون نیاز به دسترسی Administrator/Sudo) حل کند.dotnetupdotnetup در کنفرانس Build 2026، مدیریت نسخههای داتنت روی سیستم توسعهدهندگان شبیه به یک کلاف سردرگم بود. بیایید اعتراف کنیم که همه ما حداقل یکبار با خطاهای عجیب و غریب نسخه SDK مواجه شدهایم.sudo (در لینوکس/مک) میداشتیم. این موضوع در شرکتهای بزرگ با قوانین سختگیرانه IT، پروسه آپدیت را هفتهها عقب میانداخت.dotnet-install.ps1 یا dotnet-install.sh اگرچه راهگشا بود، اما مدیریت متغیرهای محیطی (PATH و DOTNET_ROOT) را به عهده خود کاربر میگذاشت که معمولاً منجر به اشتباه میشد.dotnetupچیست؟ (فلسفه وجودی)dotnetup ابزار رسمی و جدید مایکروسافت برای مدیریت زنجیره ابزار (Toolchain Management) در داتنت است. فلسفه وجودی این ابزار در سه کلمه خلاصه میشود: سادگی، استقلال و سرعت.تعریف رسمی:dotnetup یک ابزار خط فرمان (CLI) سبک است که به توسعهدهنده اجازه میدهد چندین نسخه مختلف از SDKها و Runtimeهای داتنت را به صورت کاملاً ایزوله، بدون نیاز به دسترسی ادمین و به صورت محلی (User-local) نصب، مدیریت و سوییچ کند.dotnetup رخ میدهد، محل و نحوه نصب داتنت است. بیایید این دو رویکرد را مقایسه کنیم:| ویژگی | روش سنتی (System-global) | روش جدید با dotnetup (User-local) |
| محل نصب | پوشههای سیستمی مانند C:\Program Files\dotnet یا /usr/share/dotnet | پوشه شخصی کاربر مانند ~/.dotnet/ یا LocalAppData |
| نیاز به دسترسی Admin/Sudo | بله (اجباری) | خیر (کاملاً بینیاز) |
| تأثیر روی سایر کاربران سیستم | تغییرات روی تمام کاربران و سرویسهای سیستم اعمال میشود. | تغییرات فقط و فقط مختص کاربر فعلی است. |
| امنیت | بالا رفتن ریسک با دادن دسترسی روت به اسکریپتها. | امنیت بسیار بالا به دلیل اجرا در لایه کاربر. |
rustup): ابزار dotnetup مستقیماً الهام گرفته از ابزار فوقالعاده محبوب rustup در زبان راس است. همانطور که در راس با یک دستور بین نسخههای Stable و Nightly سوییچ میکنید، اینجا هم همین تجربه را خواهید داشت.nvm یا fnm): در دنیای جاوااسکریپت، مدیریت نسخههای Node بدون NVM غیرممکن است. dotnetup نقش NVM را برای جهان داتنت ایفا میکند.dotnetup را روی سیستمعاملهای مختلف نصب کنیم و با مکانیزم راهاندازی اولیه آن آشنا شویم. از اینجا به بعد، ترمینال (Terminal) یا پاورشل (PowerShell) ابزار اصلی ما خواهد بود.dotnetup پیش روی ما گذاشته است: استفاده از مدیر بسته محبوب Winget یا استفاده از اسکریپت مستقیم PowerShell.یادآوری مهم: برای هیچکدام از این روشها نیازی به باز کردن ترمینال به صورت Run as Administrator ندارید!
winget install Microsoft.DotNetUp
irm https://dotnet.microsoft.com/download/dotnetup/install.ps1 | iex
dotnetup از طریق اسکریپت شل (sh) یا برای مک از طریق ابزار Homebrew بسیار ساده است.brew install dotnetup
curl --proto '=https' --tlsv1.2 -sSf https://dotnet.microsoft.com/download/dotnetup/install.sh | sh
dotnetup یک فرآیند نصب تعاملی و متنی را در داخل ترمینال آغاز میکند. این فرآیند از شما چند سؤال ساده میپرسد:C:\Users\~/.dotnetup/initوprintm)dotnetup یا دستورات خود داتنت (dotnet) کجا هستند. اینجاست که جادوی اصلی اتفاق میافتد.dotnetup initdotnetup را به Environment Variables کاربر (نه سیستم) اضافه میکند..bashrc یا .zshrc) اضافه میکند.printm(Print Mechanism)PATH و DOTNET_ROOT در ترمینال فعلی (بدون بستن و باز کردن مجدد آن) است. dotnetup برای حل این مشکل از مکانیزم printm استفاده میکند.dotnetup به طور هوشمند بررسی میکند که کدام نسخه از داتنت باید فعال باشد و خروجی متغیرها را مستقیماً به محیط ترمینال شما تزریق میکند.dotnetup --version
dotnetup را با موفقیت نصب و راهاندازی کردهایم، وقت آن است که به سراغ کار اصلی برویم: مدیریت، نصب و بهروزرسانی نسخههای مختلف داتنت. در این بخش با دستورات روزمره و کلیدی این ابزار آشنا خواهید شد.list)dotnetup روی کامپیوتر شما مدیریت میشوند، از دستور زیر استفاده کنید:dotnetup list
نکته: این دستور فهرستی از SDKها و رانتایمهای محلی شما را نشان میدهد و با یک علامت ستاره (*) نسخه فعال فعلی (Active) را مشخص میکند.dotnetup list --remote
dotnetup list --remote --lts
dotnetup مدیریت SDKها (Software Development Kits) است که برای کامپایل و ساخت برنامهها به آنها نیاز داریم.install را همراه با شماره نسخه بنویسید:dotnetup install sdk 8.0.401
dotnetup install sdk 10.0
dotnetup uninstall sdk 8.0.401
runtime)dotnetup install runtime 10.0
dotnetup میتوانید رانتایمهای تخصصی را هم مدیریت کنید:dotnetup install runtime aspnetcore 10.0
dotnetup install runtime desktop 10.0
update)dotnetup که شما را از چک کردن مدام سایت مایکروسافت خلاص میکند، قابلیت آپدیت هوشمند است. دیگر نیازی نیست برای هر پچ امنیتی جدید، کل پروسه دانلود را از اول طی کنید.dotnetup ابتدا خودش را بهروز کند و سپس تمام SDKها و Runtimeهای نصب شده روی سیستم شما را به آخرین پچهای امنیتی و پایدار ارتقا دهد:dotnetup update
dotnetup update --channel 11.0
dotnetup برای حل این چالشها میرویم.dotnetup برای این کار ویژگی فوقالعادهای به نام One-shot Execution یا اجرای تک-مرحلهای دارد که از طریق دستور واسط netup.net یا سوئیچ --with انجام میشود.dotnetup run --with 8.0.401 -- dotnet build
dotnet build را اجرا میکند و پس از پایان کار، دوباره سیستم را به حالت داتنت ۱۱ برمیگرداند.global.jsonglobal.json ابزاری سنتی برای قفل کردن نسخه SDK در یک پوشه یا پروژه است. خبر خوب این است که dotnetup کاملاً با این مکانیزم هماهنگ و یکپارچه (Integrated) است.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 در پوشه فعلی ایجاد میکند که نسخه آن روی داتنت ۱۰ قفل شده است.dotnetup را نصب کنم، چه بلایی سر داتنتهایی که ویژوال استودیو نصب کرده میآید؟»dotnetup را به گونهای طراحی کرده که کمترین تداخل را داشته باشد:C:\Program Files\dotnet) انجام میدهد و آپدیتهای خود را از طریق Visual Studio Installer دریافت میکند.dotnetup مسیرهای محلی خود (User-local) را در ابتدای متغیر PATH قرار میدهد. این یعنی در ترمینال، حرف اول و آخر را dotnetup میزند.dotnetup ابتدا به پوشه محلی خود نگاه میکند؛ اگر نسخه مورد نظر را پیدا نکند، به عنوان لایه پشتیبان (Fallback)، به سراغ داتنت نصبشده توسط ویژوال استودیو در سیستم میرود.switch)switch یا default استفاده میکنید.dotnetup default sdk 10.0
dotnet --version خروجی نسخه ۱۰ را به شما نشان خواهد داد، مگر اینکه در پوشهای باشید که global.json آن را بازنویسی (Override) کند.DOTNET_ROOTوPATH)dotnetup با آن مواجه میشوند، به هم ریختن متغیرهای محیطی (Environment Variables) است.dotnet --version همچنان نسخه قدیمی را نشان میدهد، یا اصلاً دستور داتنت شناخته نمیشود:PATH در سیستم شما به هم خورده است و مسیر سیستمی داتنت (مثل C:\Program Files\dotnet) قبل از مسیر dotnetup قرار دارد.dotnetup به طور خودکار فایلهای کانفیگ شل یا رجیستری ویندوز را اسکن و اصلاح کند:dotnetup doctor
dotnetup doctor ابزار اختصاصی عیبیابی است که وضعیت سلامت نصب، متغیرهای محیطی و دسترسیهای پوشهها را بررسی و به صورت خودکار تعمیر میکند.DOTNET_ROOT)DOTNET_ROOT نگاه میکنند. اگر این متغیر به پوشه سیستمی قدیمی اشاره کند، برنامهها کرش میکنند..zshrc یا .bashrc) به درستی Load میشود:dotnetup env
dotnetup استفاده از آن در خط لولههای اتوماسیون (Pipelines) است. به جای نوشتن اسکریپتهای پیچیده برای دانلود داتنت در داکر یا سرورهای Build، میتوانید از سرعت و سادگی dotnetup استفاده کنید.- 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.slnsudo یا ادمین، کانتینرها (Containers) یا Runnerهای شما با کمترین سطح دسترسی امنیتی (Non-root user) میتوانند پلتفرم داتنت را دانلود، آپدیت و اجرا کنند که این یک امتیاز بزرگ برای تیمهای SecOps است.dotnetup با در نظر گرفتن این دغدغه امنیتی ساخته شده است.dotnetup install را اجرا میکنید، ابزار به طور خودکار مراحل زیر را طی میکند:.sha512 یا کلیدهای GPG مایکروسافت) مربوط به آن نسخه را به صورت مجزا دریافت میکند.dotnetup با نمایش خطای امنیتی زیر، پروسه را متوقف میکند:Error: Checksum verification failed for SDK 10.0.100. The file may have been corrupted or tampered with. Installation aborted.
dotnetup رسیدیم. در این سلسله مطالب آموختیم که چگونه:global.json و تکنیکهای اجرای تک-دستوری، پروژههای سازمانی را مدیریت کنیم.dotnetup doctor از سلامت سیستم خود مطمئن شوید و مدیریت مدرن داتنت را آغاز کنید!