عنوان:

‫امکان اجرای مستقیم فایل‌های سی‌شارپ در دات‌نت 10 با دستور dotnet run app.cs


نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۳/۰۴ ۰۸:۳۵
آدرس: www.dntips.ir
زبان برنامه‌نویسی سی‌شارپ به عنوان یکی از ارکان اصلی چارچوب دات‌نت مایکروسافت، سال‌هاست که به دلیل انعطاف‌پذیری و قدرت خود در توسعه انواع برنامه‌ها، از کنسول تا وب، مورد توجه توسعه‌دهندگان قرار دارد. با این حال، یکی از چالش‌های همیشگی برای برنامه‌نویسان تازه‌کار، پیچیدگی‌های اولیه در راه‌اندازی پروژه‌ها و درک ساختارهای اولیه مانند فایل‌های پروژه (Project Files) و فضای‌نام‌ها (Namespaces) بوده است. مایکروسافت در نسخه‌های اخیر دات‌نت، به‌ویژه در پیش‌نمایش چهارم دات‌نت 10 (.NET 10 Preview 4)، رویکردی نوین را معرفی کرده است که امکان اجرای مستقیم فایل‌های سی‌شارپ با دستور dotnet run app.cs را فراهم می‌کند. این قابلیت، تجربه یادگیری و توسعه را برای برنامه‌نویسان، به‌ویژه مبتدیان، ساده‌تر کرده و به آن‌ها اجازه می‌دهد بدون نیاز به درک پیچیدگی‌های ساختار پروژه، بر نوشتن کد متمرکز شوند. در این مقاله، این ویژگی جدید بررسی شده و با ارائه مثال‌های عملی و توضیحات دقیق، ارزش آن برای توسعه‌دهندگان دات‌نت تشریح می‌شود.

ساده‌سازی تجربه یادگیری سی‌شارپ
یکی از موانع اصلی در یادگیری سی‌شارپ، مواجهه با ساختارهای پیچیده‌ای مانند فضای‌نام‌ها (Namespaces)، کلاس‌ها (Classes)، و فایل‌های پروژه مبتنی بر XML است که برای یک برنامه‌نویس تازه‌کار می‌تواند دلهره‌آور باشد. به طور سنتی، ایجاد یک برنامه ساده مانند چاپ «Hello, World» در کنسول، نیازمند ایجاد یک پروژه کنسول با دستور dotnet new console بود. این فرآیند، فایل‌هایی مانند Program.cs و فایل پروژه با پسوند csproj تولید می‌کرد که حاوی تنظیمات پیچیده‌ای بود. برای مثال، کد زیر نمونه‌ای از یک برنامه کنسول سنتی است:
using System;

namespace MyFirstApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}
این کد، علاوه بر خط ساده Console.WriteLine("Hello, World!")، شامل مفاهیمی مانند فضای‌نام، کلاس، متد استاتیک (Static Method)، و آرگومان‌های ورودی است که برای یک مبتدی ممکن است گیج‌کننده باشد. علاوه بر این، فایل پروژه XML و پوشه‌های اضافی مانند obj و bin به پیچیدگی محیط توسعه می‌افزایند.
برای رفع این مشکل، مایکروسافت در دات‌نت 6 تغییراتی را آغاز کرد و در دات‌نت 10 پیش‌نمایش 4، این امکان را فراهم کرد که توسعه‌دهندگان بتوانند یک فایل سی‌شارپ را به طور مستقیم اجرا کنند. به عنوان مثال، یک فایل ساده به نام hello.cs با محتوای زیر کافی است:
Console.WriteLine("Hello, C#!");
با اجرای دستور dotnet run hello.cs، این فایل مستقیماً اجرا شده و خروجی Hello, C#! را در کنسول نمایش می‌دهد. این رویکرد، که به «اجرای فایل مستقیم» معروف است، نیاز به ایجاد پروژه یا درک مفاهیم پیشرفته را از بین می‌برد و به توسعه‌دهندگان اجازه می‌دهد بر یادگیری زبان تمرکز کنند.

افزودن قابلیت‌های پیشرفته به فایل‌های تک‌فایلی
یکی از نقاط قوت این ویژگی جدید، امکان گسترش برنامه‌های تک‌فایلی برای انجام کارهای پیچیده‌تر است. برای مثال، فرض کنید می‌خواهیم برنامه‌ای بنویسیم که مدت زمان گذشته از یک رویداد خاص را محاسبه کند. کد زیر نمونه‌ای از این کاربرد است:
DateTimeOffset buildStart = DateTimeOffset.Parse("2025-05-18");
TimeSpan timeSinceBuild = DateTimeOffset.Now - buildStart;
Console.WriteLine($"It has been {timeSinceBuild.Days} days since Build started.");
این کد با محاسبه تفاوت زمانی بین تاریخ کنونی و تاریخ شروع یک رویداد (مثلاً کنفرانس بیلد 2025)، تعداد روزهای گذشته را نمایش می‌دهد. با اجرای دستور dotnet run app.cs، خروجی به صورت یک عدد خام (مانند «2 days») نمایش داده می‌شود که ممکن است برای کاربر نهایی چندان خوانا نباشد.
برای بهبود خروجی، می‌توان از بسته‌های خارجی مانند Humanizer استفاده کرد. این بسته امکان تبدیل خروجی‌های خام به عبارات خواناتر را فراهم می‌کند. برای استفاده از این بسته در یک فایل تک‌فایلی، از دستورات نادیده‌گیرنده (Ignore Directives) با پیشوند #: استفاده می‌شود:
#: package Humanizer >= 2.0
using Humanizer;

DateTimeOffset buildStart = DateTimeOffset.Parse("2025-05-18");
TimeSpan timeSinceBuild = DateTimeOffset.Now - buildStart;
Console.WriteLine($"It has been {timeSinceBuild.Humanize()} since Build started.");
با اجرای این کد، خروجی به صورت خواناتری مانند «2 days» نمایش داده می‌شود. این مثال نشان می‌دهد که توسعه‌دهندگان می‌توانند بدون نیاز به فایل پروژه، بسته‌های خارجی را به برنامه خود اضافه کرده و از قابلیت‌های پیشرفته‌تر استفاده کنند.

پشتیبانی از اجرای مستقیم در محیط‌های لینوکس
یکی از ویژگی‌های جذاب این رویکرد جدید، پشتیبانی از اجرای مستقیم فایل‌های سی‌شارپ در محیط‌های لینوکس با استفاده از شِبَنگ (Shebang) است. شِبَنگ، که با #! شروع می‌شود، به سیستم عامل لینوکس اجازه می‌دهد فایل را به عنوان یک اسکریپت قابل اجرا تشخیص دهد. برای مثال:
#!/usr/bin/env dotnet run --
Console.WriteLine("Hello from Linux!");
با تنظیم فایل به حالت قابل اجرا با دستور chmod +x hello.cs، می‌توان آن را مستقیماً با ./hello.cs اجرا کرد. این قابلیت، سی‌شارپ را به زبانی مشابه پایتون یا نود.جی‌اس (Node.js) تبدیل می‌کند که در آن‌ها اجرای فایل‌های اسکریپتی به سادگی انجام می‌شود. این ویژگی به‌ویژه برای توسعه‌دهندگانی که در محیط‌های لینوکس مانند WSL (Windows Subsystem for Linux) کار می‌کنند، ارزشمند است.

توسعه برنامه‌های وب بدون پروژه
علاوه بر برنامه‌های کنسول، این ویژگی امکان ایجاد برنامه‌های وب را نیز فراهم می‌کند. به عنوان مثال، یک وب API ساده می‌تواند به صورت زیر در یک فایل تک‌فایلی نوشته شود:
#: sdk Microsoft.AspNetCore.App
#: package Swashbuckle.AspNetCore >= 6.0

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.MapGet("/", () => "Hello, Web API!");
app.Run();
با اجرای دستور dotnet run webapi.cs، یک وب API روی localhost:5000 راه‌اندازی می‌شود که می‌تواند با ابزارهایی مانند Swagger تعامل داشته باشد. این رویکرد به توسعه‌دهندگان امکان می‌دهد بدون نیاز به ساختار پروژه پیچیده، برنامه‌های وب را آزمایش کنند.

انتقال به پروژه‌های سنتی
اگرچه اجرای مستقیم فایل‌ها برای یادگیری و توسعه سریع مناسب است، پروژه‌های پیچیده‌تر معمولاً به ساختار پروژه نیاز دارند. دات‌نت 10 این امکان را فراهم کرده که فایل‌های تک‌فایلی به پروژه‌های استاندارد تبدیل شوند. با اجرای دستور dotnet project convert hello.cs، فایل hello.cs به یک پروژه کامل تبدیل می‌شود که شامل فایل csproj و ساختار استاندارد دات‌نت است. این فرآیند، انتقال از حالت ساده به پروژه‌های پیچیده‌تر را بدون نیاز به بازنویسی کد تسهیل می‌کند.

نتیجه‌گیری
اجرای مستقیم فایل‌های سی‌شارپ با دستور dotnet run app.cs تحولی در تجربه توسعه با دات‌نت ایجاد کرده است. این ویژگی با حذف موانع اولیه مانند فایل‌های پروژه و ساختارهای پیچیده، یادگیری سی‌شارپ را برای مبتدیان آسان‌تر می‌کند و به توسعه‌دهندگان حرفه‌ای امکان آزمایش سریع ایده‌ها را می‌دهد. از اجرای برنامه‌های کنسول ساده تا توسعه وب API و پشتیبانی از شِبَنگ در لینوکس، این قابلیت انعطاف‌پذیری بی‌سابقه‌ای به سی‌شارپ افزوده است. با این حال، برای پروژه‌های بزرگ‌تر، امکان تبدیل به پروژه‌های استاندارد همچنان حفظ شده است. توسعه‌دهندگان می‌توانند با دانلود پیش‌نمایش چهارم دات‌نت 10 و افزونه سی‌شارپ در ویژوال استودیو کد (Visual Studio Code) این ویژگی را آزمایش کنند و بازخورد خود را برای بهبود نسخه‌های آتی ارائه دهند.


مشاهده مطلب اصلی