- ตั้งแต่ .NET 10 Preview 4 เป็นต้นไป ได้เพิ่มความสามารถในการรันไฟล์ C# เดี่ยวได้ทันทีด้วย
dotnet run app.cs ทำให้สามารถรันโค้ด C# ได้แม้ ไม่มีไฟล์โปรเจ็กต์
- ด้วย file-based apps การรันสคริปต์แบบง่าย การทดสอบ และการลองไอเดียจึงทำได้สะดวกขึ้นมาก คล้ายกับ Python หรือ JavaScript
- ยังสามารถจัดการ การอ้างอิงแพ็กเกจ NuGet, การระบุ SDK, การตั้งค่า build properties ผ่าน directive ภายในไฟล์ได้ ช่วยเพิ่มความยืดหยุ่นในการพัฒนา
- รองรับ shebang จึงนำไปใช้กับ CLI utility หรือสคริปต์อัตโนมัติบนระบบตระกูลยูนิกซ์ได้
- หากต้องการ ยังสามารถแปลงเป็น แอปแบบอิงโปรเจ็กต์ ได้อย่างลื่นไหล ทำให้เชื่อมต่อจากการเรียนรู้และการทำต้นแบบไปสู่การพัฒนาแอปจริงได้อย่างเป็นธรรมชาติ
dotnet run app.cs คืออะไร
- เดิมที หากต้องการรันโค้ด C# ด้วย
dotnet CLI จะต้องมีโครงสร้าง โปรเจ็กต์ (.csproj) เสมอ
- ตอนนี้สามารถรันได้ทันทีด้วยไฟล์ .cs เดี่ยว เพียงไฟล์เดียว ทำให้ลดอุปสรรคในการเริ่มต้นลงอย่างมาก
- เหมาะกับการใช้งานหลากหลาย เช่น ภาษาสคริปต์ งานอัตโนมัติ การทดลอง และการเรียนรู้
- ด้วยการ ผสานรวมกับ CLI จึงใช้งานได้ทันทีหากมี dotnet โดยไม่ต้องติดตั้งเครื่องมือเพิ่ม
- เมื่อโค้ดใหญ่ขึ้น ก็สามารถขยายไปเป็นแอปแบบอิงโปรเจ็กต์ได้ด้วยภาษาและเครื่องมือชุดเดิม
รองรับ directive ระดับไฟล์
- ใน file-based apps ก็สามารถประกาศการตั้งค่าหลักของโปรเจ็กต์เป็น directive ภายในไฟล์ .cs ได้โดยตรง
-
การอ้างอิงแพ็กเกจ NuGet
- สามารถอ้างอิง แพ็กเกจ NuGet ได้ทันทีด้วย directive
#:package
-
การระบุ SDK
- สามารถระบุ ประเภทของ SDK ได้ด้วย directive
#:sdk
-
การตั้งค่า MSBuild properties
- สามารถระบุ build properties ได้โดยตรงด้วย
#:property
-
รองรับ shebang สำหรับเชลล์สคริปต์
- ใส่
#!/usr/bin/dotnet run ไว้บนสุดของไฟล์ เพื่อใช้งานเป็น ไฟล์รันได้โดยตรงบนระบบตระกูลยูนิกซ์
การแปลงเป็นแอปแบบอิงโปรเจ็กต์
ความแตกต่างจากแนวทาง C# script แบบเดิม
- ก่อนหน้านี้แม้จะสามารถรัน C# script ได้ด้วยเครื่องมือจากชุมชน เช่น CS-Script, dotnet-script, Cake เป็นต้น แต่จำเป็นต้องติดตั้งและตั้งค่าเครื่องมือแยกต่างหาก
- ตอนนี้สามารถใช้ คอมไพเลอร์และภาษา C# ชุดเดียวกันได้เลยโดยไม่ต้องติดตั้งเพิ่มหรือเข้าโหมดพิเศษ ทำให้รันโค้ดได้ทันทีโดยแทบไม่มีอุปสรรค
วิธีเริ่มต้น
- ติดตั้ง .NET 10 Preview 4
- หากใช้ Visual Studio Code ต้องติดตั้ง C# Dev Kit และ ส่วนขยาย C# เวอร์ชันพรีรีลีสล่าสุด (2.79.8 ขึ้นไป)
- สร้างไฟล์
.cs แล้วเขียนโค้ดได้ทันที
- รัน
dotnet run hello.cs ในเทอร์มินัล
- หากต้องการ สามารถแปลงเป็นโปรเจ็กต์ด้วย
dotnet project convert hello.cs
อ่านเพิ่มเติม
แผนในอนาคต
- มีแผนเพิ่มการรองรับ file-based apps ใน VS Code และปรับปรุง IntelliSense สำหรับ directive รวมถึงประสิทธิภาพและการดีบัก
- กำลังพัฒนาความสามารถเพิ่มเติม เช่น รองรับหลายไฟล์ และการปรับปรุงความเร็วในการรัน
dotnet run app.cs ช่วยให้เข้าถึง C# ได้ง่ายขึ้น โดยยังคงมอบพลังของ .NET ไว้อย่างครบถ้วน
- เป็นพื้นฐานที่ช่วยให้เปลี่ยนผ่านจากการทำต้นแบบ การศึกษา ไปจนถึงการพัฒนาโปรดักชันได้รวดเร็วยิ่งขึ้น
4 ความคิดเห็น
ประสบการณ์ DX ที่ให้การเติมโค้ดอัตโนมัติบนพื้นฐาน File-based App มีให้ใช้งานอยู่แล้วใน C# extension เวอร์ชันล่าสุด แต่เดิม Microsoft ไม่ได้เผยแพร่ส่วนขยายนี้นอกเหนือจาก VS Code Marketplace
เพื่อแก้ความไม่สะดวกนี้ จึงได้แยกเฉพาะส่วน C# Extension ของ C# Dev Kit (ส่วนที่ใช้ไลเซนส์ MIT) มาทำ autobuild/auto-publish แยกต่างหากและลงทะเบียนไว้บน OpenVSX พร้อมแชร์วิดีโอเดโมสั้น ๆ ที่อิงกับ Kiro ตามนี้
https://www.youtube.com/watch?v=pIi7CWOPQSA
ตอนที่ก่อนหน้านี้ผมเคยใช้ฟีเจอร์ C# Interactive แพ็กเกจที่ไม่ได้ติดตั้งไว้ในเครื่องจะใช้งานไม่ได้ แต่ดูเหมือนว่าตอนนี้มันถูกปรับปรุงแล้วนะครับ
ความคิดเห็นจาก Hacker News
npm run <command>go run github.com/kardianos/json/cmd/jsondiff@v1.0.1ซึ่งเป็นฟีเจอร์ที่เจ๋งมากdotnet runนั้นแคชผลการคอมไพล์ให้อยู่แล้ว จึงไม่ต้องมี caching layer เพิ่มเติม (ถ้าจะปิดใช้ให้ใส่--no-buildและถ้าจะดู path ของไบนารีให้ใช้--artifacts-path)*.main.ktsเท่านั้นถึงจะทำงาน) แนวทางแบบนี้เหมาะมากกับสคริปต์เล็ก ๆ หรือการทำต้นแบบ และก็ใช้งานความสามารถของ JVM ได้จริงจังด้วย แต่สำหรับสคริปต์เล็ก ๆ Ruby ก็ยังสะดวกที่สุด โดยเฉพาะเวลาเรียกโปรแกรมภายนอกที่ไวยากรณ์ backtick ใช้ง่ายมากdotnet run <file>ใช้งานได้ พออัปเดตก็ใช้งานได้ตามปกติ สาเหตุคือไฟล์ใช้การขึ้นบรรทัดใหม่แบบ CRLF แทน LF#!/usr/local/share/dotnet/dotnet runหรือ#!/usr/bin/env -S dotnet runใน shebang.dump()ส่วนdotnet runตัวนี้น่าจะเป็นเครื่องมือที่เข้ามาเติมเต็มมากกว่า เมื่อก่อนเคยอยู่ในที่ที่เกลียด PowerShell มากและใช้ LINQPad ทำงานสคริปต์แทบทั้งหมด ซึ่งในบริบทแบบนั้นมันก็ใช้ได้ดีdotnet runใน VSCode หรือ Visual Studio จะใกล้เคียงกับ LINQPad แค่ไหน จุดเด่นของ LINQPad คือการแสดงผลลัพธ์แบบภาพ ถ้าdotnet runแสดงได้แค่ข้อความหรือจำเป็นต้องมีปลั๊กอินเพิ่มเยอะ ความต้องการ LINQPad ก็คงยังอยู่ แต่ถ้าต้องการแค่เช็กไวยากรณ์อะไรบางอย่างdotnet runอาจเป็นตัวเลือกที่ดีกว่า ผมเองก็บางครั้งลองไวยากรณ์ที่ไม่แน่ใจใน LINQPad เหมือนกันผมได้ลองทำตัวอย่างใช้งานจริงที่เกี่ยวกับฟีเจอร์นี้ไว้ 2 ตัวอย่าง เลยมาแชร์ไว้ในคอมเมนต์ตอบกลับครับ เป็นโค้ดตัวอย่างแอป GUI สำหรับ Windows และ macOS ที่ใช้ MCP server และ Avalonia 😊
https://forum.dotnetdev.kr/t/…