- .NET 10 Preview 4 ile birlikte artık tek bir C# dosyasını
dotnet run app.cs ile doğrudan çalıştırmak mümkün; böylece proje dosyası olmadan da C# kodu çalıştırılabiliyor
- Dosya tabanlı uygulamalar (file-based apps) sayesinde Python veya JavaScript benzeri basit script çalıştırma, test etme ve fikir denemeleri çok daha kolay hale geliyor
- NuGet paket başvuruları, SDK belirleme, build özellikleri ayarlama gibi işlemler de dosya içindeki directive'lerle yönetilebildiği için geliştirme esnekliği artıyor
- shebang desteği sayesinde Unix tabanlı sistemlerde CLI yardımcı araçları ve otomasyon script'leri için de kullanılabiliyor
- Gerektiğinde proje tabanlı uygulamaya sorunsuz biçimde dönüştürülebilmesi, öğrenme ve prototiplemeden gerçek uygulama geliştirmeye doğal bir geçiş sağlıyor
dotnet run app.cs nedir?
- Daha önce
dotnet CLI ile C# kodu çalıştırmak için mutlaka bir proje (.csproj) yapısı gerekiyordu
- Artık yalnızca tek bir .cs dosyasıyla doğrudan çalıştırma mümkün olduğu için giriş eşiği ciddi biçimde düşüyor
- Script dilleri, otomasyon, deneyler ve öğrenme gibi çeşitli kullanım senaryoları için uygun
- CLI entegrasyonu sayesinde ek araç kurmadan, yalnızca dotnet yüklüyse hemen kullanılabiliyor
- Kod büyüdüğünde aynı dil ve araçlarla proje tabanlı uygulamaya genişletilebiliyor
Dosya düzeyinde directive desteği
- Dosya tabanlı uygulamalarda da projenin temel ayarları doğrudan .cs dosyası içindeki directive'lerle tanımlanabiliyor
-
NuGet paket başvurusu
#:package directive'i ile NuGet paketi doğrudan referanslanabiliyor
-
SDK belirleme
#:sdk directive'i ile SDK türü belirtilebiliyor
-
MSBuild özellik ayarı
#:property ile build özellikleri doğrudan belirlenebiliyor
-
Shell script'leri için shebang desteği
- Dosyanın en üstüne
#!/usr/bin/dotnet run eklenerek Unix tabanlı sistemlerde yürütülebilir dosya olarak doğrudan kullanılabiliyor
Proje tabanlı uygulamaya dönüştürme
Mevcut C# script yaklaşımlarından farkı
- Şimdiye kadar C# script çalıştırmak için CS-Script, dotnet-script, Cake gibi topluluk araçları kullanılabiliyordu; ancak bunlar ayrı araç kurulumu ve ayar gerektiriyordu
- Artık ek kurulum veya ayrı bir mod olmadan aynı C# derleyicisi ve dili kullanılarak, giriş engeli olmaksızın doğrudan kod çalıştırılabiliyor
Nasıl başlanır
- .NET 10 Preview 4 kurun
- Visual Studio Code kullanıyorsanız C# Dev Kit ile C# eklentisinin en güncel ön sürümünü (2.79.8 veya üzeri) kurmanız gerekiyor
- Bir
.cs dosyası oluşturup kodu yazın
- Terminalde
dotnet run hello.cs komutunu çalıştırın
- Gerekirse
dotnet project convert hello.cs ile projeye dönüştürün
Daha fazlası
Gelecek planları
- VS Code içinde dosya tabanlı uygulama desteği ve directive'ler için IntelliSense iyileştirmeleri, performans geliştirmeleri ve daha güçlü debug desteği planlanıyor
- Çoklu dosya desteği ve çalıştırma hızı iyileştirmeleri gibi ek özellikler de geliştiriliyor
dotnet run app.cs, C#'ı daha erişilebilir hale getirirken .NET'in gücünü de aynen sunuyor
- Prototiplemeden eğitime ve production geliştirmeye daha hızlı geçiş için bir temel sağlıyor
4 yorum
dotnet run app.csile C# dosyalarını doğrudan çalıştırma yöntemiFile-based App tabanlı otomatik tamamlama deneyimi sunan DX, C# eklentisinin en güncel sürümünde sağlanıyor; ancak başlangıçta Microsoft, eklentiyi VS Code Marketplace dışındaki bir yere yayımlamıyordu.
Bu tür bir rahatsızlığı gidermek için, C# Dev Kit yerine yalnızca C# Extension bölümünün (MIT lisanslı bölüm) ayrı olarak autobuild/auto-publish edilmesini sağlayıp OpenVSX'e kaydettim; buna dayanarak Kiro tabanlı basit bir demo videosu paylaşıyorum.
https://www.youtube.com/watch?v=pIi7CWOPQSA
Daha önce C# Interactive özelliğini kullandığımda yerel olarak kurulu olmayan paketleri kullanamıyordum; anlaşılan artık bu iyileştirilmiş.
Hacker News yorumu
npm run <command>benzeri bir yaklaşım olsa güzel olurdu.gorun(https://github.com/erning/gorun) gibi araçlarla Go’yu uzun zamandır rahatça script gibi kullanmak mümkündü. Son dönemde isego run github.com/kardianos/json/cmd/jsondiff@v1.0.1gibi etiketleri doğrudan alıp tek seferde çalıştırmayı destekliyor; bu gerçekten hoş bir özellik.dotnet runzaten derleme çıktısını cache’lediği için ayrıca bir cache katmanına ihtiyaç yok (--no-buildile kapatılabilir, ikili dosya yolunu görmek için--artifacts-pathkullanılabilir).dotnetiçin 10 ya da 11 sürümünde tam yorumlanan bir mod geleceğini duydum; bunun bu tür kullanım senaryolarına uygulanıp uygulanmayacağını merak ediyorum https://github.com/dotnet/runtime/issues/112748*.main.ktsolması gerekiyor). Bu yaklaşım küçük script’ler ve prototipleme için çok iyi, ayrıca JVM yeteneklerinden yararlanmak açısından da pratik. Yine de küçük script’lerde Ruby hâlâ en rahatı; özellikle dış program çalıştırırken backtick sözdizimi gerçekten çok kullanışlı..net10 preview 4 sdkimajında dosyayı doğrudan çalıştırmak için shebang test ettim ama ilk başta düzgün çalışmadı.dotnet run <file>ile ise çalışıyordu. Güncellemeden sonra düzeldi; sorunun nedeni dosyanın LF yerine CRLF satır sonları kullanmasıymış.#!/usr/local/share/dotnet/dotnet runya da#!/usr/bin/env -S dotnet runkullanmanız gerekiyor..dump()ile değerleri keşfetmek. Bu yenidotnet runise daha çok onu tamamlayan bir araç gibi olabilir. Eskiden PowerShell’den aşırı nefret edilen bir yerde neredeyse tüm scripting işlerini LINQPad ile yapmıştık; böyle ortamlarda işe yarıyordu.dotnet rundeneyiminin LINQPad’e ne kadar yaklaşacağını merak ediyorum. LINQPad’in gücü sonuçları görselleştirebilmesi.dotnet runyalnızca metin basıyorsa ya da çok sayıda ayrı eklenti gerektiriyorsa LINQPad’e ihtiyaç sürecektir. Yalnızca sözdizimini kontrol etmek gibi işler içinsedotnet rundaha iyi bir tercih olabilir. Ben de ara sıra karıştırdığım sözdizimlerini LINQPad’de deneyerek kontrol ediyorum.Bu özellikle ilgili iki gerçek örnek de hazırladım, onları da yanıt olarak paylaşıyorum. MCP sunucusu ve Avalonia kullanılarak hazırlanmış Windows ve macOS GUI uygulaması örnek kodları. 😊
https://forum.dotnetdev.kr/t/…