مقدمه
تاکنون، ما برنامههای خود را از داخل محیط توسعه (مانند ویژوال استودیو) و در حالت Debug
اجرا کردهایم. این حالت برای توسعه و اشکالزدایی عالی است، اما زمانی که میخواهیم برنامهی خود
را در اختیار کاربران نهایی قرار دهیم، باید یک نسخهی بهینه و قابل حمل از آن بسازیم. این فرآیند
انتشار (Publishing) نام دارد. فرآیند انتشار، تمام کدهای برنامه و وابستگیهای آن
را در یک پوشه جمعآوری میکند تا بتوان آن را به سادگی بر روی کامپیوترهای دیگر کپی و اجرا کرد. در
.NET، دو مدل اصلی برای انتشار برنامهها وجود دارد که در این درس به بررسی آنها خواهیم
پرداخت.
حالتهای ساخت: Debug در مقابل Release
قبل از انتشار، اولین قدم انتخاب حالت ساخت صحیح است.
- حالت Debug: این حالت برای توسعه و اشکالزدایی بهینه شده است. کامپایلر
اطلاعات اضافی (مانند فایلهای .pdb) را برای دیباگر تولید میکند و بسیاری از بهینهسازیها
را غیرفعال میکند تا فرآیند اشکالزدایی سادهتر شود.
- حالت Release: این حالت برای نسخهی نهایی و قابل ارائه به کاربر است.
کامپایلر تمام بهینهسازیهای ممکن را بر روی کد اعمال میکند تا برنامهای با حداکثر سرعت و
حداقل اندازه تولید شود. اطلاعات مربوط به دیباگ در این حالت تولید نمیشوند.
همیشه قبل از انتشار، باید حالت ساخت پروژه را بر روی Release تنظیم کنید.
مدلهای استقرار (Deployment Models)
در .NET، شما میتوانید برنامهی خود را با دو مدل اصلی مستقر کنید:
۱. استقرار وابسته به فریمورک (Framework-Dependent Deployment - FDD)
این مدل پیشفرض است. در این حالت، شما فرض میکنید که فریمورک .NET (با نسخهی صحیح یا
جدیدتر) از قبل بر روی کامپیوتر کاربر نصب شده است. خروجی انتشار در این مدل بسیار کوچک است، زیرا
فقط شامل .dll برنامهی شما و وابستگیهای شخص ثالث آن میشود و
فایلهای مربوط به خود فریمورک .NET را در بر نمیگیرد.
- مزایا: حجم خروجی بسیار کم، چندین برنامه میتوانند از یک نسخهی نصبشدهی
.NET به صورت مشترک استفاده کنند.
- معایب: کاربر باید قبل از اجرای برنامه، .NET Runtime را نصب کند.
۲. استقرار خودکفا (Self-Contained Deployment - SCD)
در این مدل، شما نه تنها کد برنامه و وابستگیهای آن، بلکه تمام فایلهای لازم از خود
فریمورک .NET را نیز در پوشهی انتشار قرار میدهید. این یعنی برنامهی
شما برای اجرا هیچ پیشنیاز خارجی ندارد و کاربر نیازی به نصب هیچ چیزی ندارد.
- مزایا: برنامه به صورت کاملاً مستقل قابل اجراست و هیچ پیشنیازی ندارد.
- معایب: حجم خروجی بسیار بزرگتر است (معمولاً دهها مگابایت).
نحوهی انتشار یک اپلیکیشن کنسول
بیایید پروژهی ShowcaseApp خود را با استفاده از .NET CLI منتشر کنیم. دستور اصلی
برای این کار dotnet publish است.
انتشار به صورت وابسته به فریمورک (FDD)
ابتدا با cd به پوشهی پروژهی ShowcaseApp بروید. سپس دستور زیر را اجرا کنید:
Terminal
dotnet publish -c Release
سوئیچ -c Release به دستور میگوید که از حالت `Release` برای ساخت استفاده کند. پس از اجرای این
دستور، یک پوشهی جدید در مسیر bin/Release/netX.0/publish (که در آن X نسخهی .NET
است) ایجاد میشود. این پوشه حاوی فایل ShowcaseApp.exe (در ویندوز)، ShowcaseApp.dll و دیگر
وابستگیهاست. برای اجرای برنامه روی یک کامپیوتر دیگر، کافی است این پوشه را کپی کرده و فایل
اجرایی را اجرا کنید (به شرط نصب بودن .NET Runtime).
انتشار به صورت خودکفا (SCD)
برای ایجاد یک نسخهی خودکفا، باید یک شناسه رانتایم (Runtime Identifier - RID) را مشخص کنیم که به
.NET میگوید برنامه را برای کدام سیستمعامل و معماری خاص بسازد. برای مثال، win-x64
برای ویندوز ۶۴ بیتی، linux-x64 برای لینوکس ۶۴ بیتی و osx-x64 برای macOS ۶۴ بیتی.
Terminal
dotnet publish -c Release --self-contained true -r win-x64
سوئیچ --self-contained true حالت خودکفا را فعال کرده و -r win-x64 شناسه رانتایم را مشخص
میکند. پوشهی publish حاصل از این دستور بسیار بزرگتر خواهد بود، اما حاوی تمام فایلهای لازم
برای اجرا بر روی یک ویندوز ۶۴ بیتی تمیز است.
انتشار به صورت یک فایل واحد (Single-File Deployment)
یکی از ویژگیهای جذاب در .NET مدرن، قابلیت انتشار کل برنامه (شامل فریمورک و تمام
وابستگیها) در قالب یک فایل اجرایی واحد است. این کار توزیع برنامه را بسیار ساده
میکند. برای این کار، کافی است یک سوئیچ دیگر به دستور publish اضافه کنیم:
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
با اجرای این دستور، پوشهی publish تنها حاوی یک فایل ShowcaseApp.exe خواهد بود که تمام
برنامه را در خود جای داده است.