- Từ .NET 10 Preview 4, đã có thêm khả năng chạy trực tiếp một tệp C# đơn lẻ bằng
dotnet run app.cs, giúp có thể thực thi mã C# ngay cả khi không có tệp dự án
- Nhờ file-based apps, việc chạy script đơn giản, kiểm thử và thử nghiệm ý tưởng trở nên dễ dàng hơn nhiều, tương tự như Python hay JavaScript
- Các thiết lập như tham chiếu gói NuGet, chỉ định SDK, cấu hình thuộc tính build cũng có thể được quản lý bằng directive ngay trong tệp, tăng tính linh hoạt cho phát triển
- Hỗ trợ shebang giúp có thể dùng cho tiện ích CLI, script tự động hóa trên hệ Unix
- Khi cần, có thể chuyển mượt sang ứng dụng dựa trên project, giúp kết nối tự nhiên từ học tập và tạo prototype đến phát triển ứng dụng thực thụ
dotnet run app.cs là gì
- Trước đây, để chạy mã C# bằng
dotnet CLI thì bắt buộc phải có cấu trúc project (.csproj)
- Giờ đây có thể chạy ngay chỉ với một tệp .cs duy nhất, giúp hạ thấp đáng kể rào cản tiếp cận
- Phù hợp cho nhiều mục đích như ngôn ngữ script, tự động hóa, thử nghiệm và học tập
- Nhờ tích hợp với CLI, chỉ cần có dotnet là dùng được ngay mà không cần cài thêm công cụ
- Khi mã nguồn lớn dần, có thể mở rộng thành ứng dụng dựa trên project bằng cùng một ngôn ngữ và bộ công cụ
Hỗ trợ directive ở cấp độ tệp
- Ngay cả với file-based app, các thiết lập quan trọng của project cũng có thể được khai báo trực tiếp bằng directive trong tệp .cs
-
Tham chiếu gói NuGet
- Có thể tham chiếu trực tiếp gói NuGet bằng directive
#:package
-
Chỉ định SDK
- Có thể chỉ định loại SDK bằng directive
#:sdk
-
Thiết lập thuộc tính MSBuild
- Có thể chỉ định trực tiếp thuộc tính build bằng
#:property
-
Hỗ trợ shebang cho shell script
- Thêm
#!/usr/bin/dotnet run ở đầu tệp để dùng trực tiếp như tệp thực thi trên hệ Unix
Chuyển đổi sang ứng dụng dựa trên project
Khác biệt với các cách dùng C# script trước đây
- Trước giờ vẫn có thể chạy C# script bằng các công cụ cộng đồng như CS-Script, dotnet-script, Cake, nhưng cần cài đặt và cấu hình công cụ riêng
- Giờ đây, có thể chạy mã ngay không rào cản bằng chính cùng compiler và ngôn ngữ C#, không cần cài đặt hay chế độ riêng biệt
Cách bắt đầu
- Cài đặt .NET 10 Preview 4
- Nếu dùng Visual Studio Code, cần cài C# Dev Kit và bản prerelease mới nhất của extension C# (2.79.8 trở lên)
- Tạo tệp
.cs rồi viết mã ngay
- Chạy
dotnet run hello.cs trong terminal
- Khi cần, chuyển sang project bằng
dotnet project convert hello.cs
Tìm hiểu thêm
Kế hoạch sắp tới
- Dự kiến sẽ tiếp tục cải thiện hỗ trợ file-based app trong VS Code và IntelliSense cho directive, cùng với hiệu năng và khả năng debug
- Các tính năng bổ sung như hỗ trợ nhiều tệp và cải thiện tốc độ thực thi cũng đang được phát triển
dotnet run app.cs giúp C# dễ tiếp cận hơn, đồng thời vẫn giữ nguyên sức mạnh của .NET
- Tạo nền tảng để chuyển đổi nhanh hơn từ prototyping, giáo dục đến phát triển production
4 bình luận
Trải nghiệm DX cung cấp tính năng tự động hoàn thành dựa trên File-based App hiện đã có trong phiên bản mới nhất của tiện ích mở rộng C#, nhưng trước đây Microsoft không phát hành tiện ích này ở nơi nào khác ngoài VS Code Marketplace.
Để giải quyết sự bất tiện này, tôi đã tách riêng phần C# Extension của C# Dev Kit (phần theo giấy phép MIT), thiết lập autobuild/auto-publish để đăng lên OpenVSX, và chia sẻ một video demo đơn giản dựa trên Kiro.
https://www.youtube.com/watch?v=pIi7CWOPQSA
Trước đây khi dùng tính năng C# Interactive thì không thể sử dụng các gói chưa được cài trên máy cục bộ, có vẻ giờ đã được cải thiện rồi.
Ý kiến trên Hacker News
npm run <command>thì sẽ rất haygo run github.com/kardianos/json/cmd/jsondiff@v1.0.1, tính năng này khá haydotnet runvốn đã cache kết quả biên dịch nên không cần thêm lớp cache riêng nào nữa (muốn tắt thì dùng--no-build, muốn xem đường dẫn binary thì dùng--artifacts-path)dotnetở phiên bản 10 hoặc 11 sẽ có chế độ interpreted hoàn chỉnh, không biết chế độ đó có áp dụng được cho trường hợp dùng này không https://github.com/dotnet/runtime/issues/112748*.main.ktsmới chạy được). Cách này rất tốt cho các script nhỏ hoặc để làm prototype, và cũng thực dụng khi muốn tận dụng các tính năng của JVM. Dù vậy, với các script nhỏ thì Ruby vẫn là thứ tiện nhất, đặc biệt cú pháp backtick khi chạy chương trình ngoài thực sự rất tiệndotnet run <file>thì vẫn chạy. Sau khi cập nhật thì hoạt động bình thường; nguyên nhân là file dùng xuống dòng CRLF thay vì LF#!/usr/local/share/dotnet/dotnet runhoặc#!/usr/bin/env -S dotnet runcho shebang.dump().dotnet runlần này có vẻ lại là công cụ bổ trợ cho đúng mảng đó. Trước đây tôi từng ở một nơi cực ghét PowerShell nên gần như xử lý toàn bộ scripting bằng LINQPad; trong bối cảnh như vậy thì nó khá hữu dụngdotnet runtrong VSCode hay Visual Studio sẽ giống LINQPad đến mức nào. Điểm mạnh của LINQPad là khả năng trực quan hóa kết quả; nếudotnet runchỉ in ra text hoặc cần quá nhiều plugin bổ sung thì nhu cầu với LINQPad vẫn sẽ còn. Nếu chỉ cần kiểm tra cú pháp các thứ thìdotnet runcó thể là lựa chọn tốt hơn; bản thân tôi cũng thỉnh thoảng mang những cú pháp dễ nhầm vào LINQPad để thửMình cũng đã làm 2 ví dụ thực tế liên quan đến tính năng này nên chia sẻ ở phần trả lời. Đây là mã mẫu cho ứng dụng GUI trên Windows và macOS sử dụng máy chủ MCP và Avalonia. 😊
https://forum.dotnetdev.kr/t/…