Altbilgi içeriğine atla
Iron Academy Logo
C# öğrenin
C# öğrenin

Diğer Kategoriler

.NET 10'da Dosya Tabanlı C# Çalıştırma

[[academy-video-youtube({"vid": "2i0MJDHvJq0", "start_time": "0", "title": ".NET 10'da Dosya Tabanlı C# Çalıştırma", "creator": "Tim Corey", "length": "13m 36s"})]]

C# her zaman kod çalıştırmak için bir proje dosyası gerektirmiştir. "Merhaba Dünya" gibisi bile bir .csproj, bir Program.cs ve bir derleme adımı gerektiriyordu, herhangi bir şey çalıştırılmadan önce. .NET 10 ile bu değişiyor. Artık tek bir .cs dosyası yazıp doğrudan çalıştırabilirsiniz, tıpkı bir Python betiği veya bir Node.js dosyası çalıştırdığınız gibi.

File-Based C# Execution in .NET 10 başlıklı videosunda, Tim Corey bu özelliğin her yönünü ele alarak bağımsız bir dosyayı çalıştırmayı, komut satırı argümanlarını geçmeyi, satır içi NuGet paketleri eklemeyi, yerel bir çalıştırılabilir dosyaya yayımlamayı ve kapsamı tek dosya formatını aştığında bir dosyayı tam bir projeye dönüştürmeyi anlatıyor. Kısa betikler ve prototipler için konsol uygulamaları kullanıyorsanız, bu iş akışını önemli ölçüde değiştirir.

Tek Bir C# Dosyası Çalıştırma

[0:40 - 1:48] Tim, VS Code'da boş bir klasörde başlar. Çözüm yok, proje dosyası yok, klişe kod yok. Tek satırlık kod içeren demo.cs adlı bir dosya oluşturuyor:

Console.WriteLine("Hello World");
Console.WriteLine("Hello World");

Bunu çalıştırmak için:

dotnet run file demo.cs
dotnet run file demo.cs

İşte tam iş akışı. dotnet run file komutu .cs dosyasını tek bir adımda derler ve çalıştırır. Arada üretilmiş bir .csproj yoktur, bin veya obj klasörleri oluşturulmaz. Zihinsel model, geleneksel C# geliştirmeden daha çok betiklemeye yakındır: bir dosya yazın, çalıştırın, çıktıyı görün.

Tim, tek dosya yürütmenin her zaman varsayılan olduğu Python ve JavaScript ile doğrudan bir karşılaştırma yapar. .NET 10 C#'ı aynı alana getiriyor, aynı zamanda C#'ı cazip kılan tür güvenliği ve performansı koruyarak.

Komut Satırı Argümanları ve Dolaylı Kullanımlar

[1:48 - 3:26] args dizisi otomatik olarak kullanılabilir, tıpkı üst düzey ifadelerle standart bir Program.cs'da olduğu gibi. Tim, dosyayı bir ad argümanını kabul edecek şekilde değiştirir:

Console.WriteLine($"Hello {args[0]}");
Console.WriteLine($"Hello {args[0]}");

Bir argümanla çalıştırmak:

dotnet run file demo.cs Tim
dotnet run file demo.cs Tim

Bu, 'Merhaba Tim' yazdırır. Tim, dosya tabanlı yürütmenin varsayılan olarak dolaylı kullanım ifadelerini içerdiği için Console.WriteLine'ın bir using System; ifadesi olmadan çalıştığını belirtiyor. Bu, C# 9'daki üst düzey ifadelerin tanıttığı aynı davranıştır, şimdi bağımsız dosyalar için genişletildi.

Microsoft'un izlediği daha geniş desen, C#'dan töreni her sürümde biraz daha azaltmaktır. Küresel kullanım ifadeleri, üst düzey ifadeler ve şimdi de bağımsız .cs dosyaları, daha önce Python veya bash betikleri gerektiren hızlı görevler için C#'ı uygun hale getirmeye yönelik adımlar.

Kullanıcı Girdisi Ekleme

[3:26 - 5:43] Tim, dosya tabanlı yürütmenin konsol uygulama kalıplarının tam kapsamını desteklediğini göstermek için argüman yaklaşımını etkileşimli girişle değiştirir:

Console.Write("What is your name? ");
string name = Console.ReadLine();
Console.WriteLine($"Hello {name}");
Console.Write("What is your name? ");
string name = Console.ReadLine();
Console.WriteLine($"Hello {name}");

Bu, giriş için bir komut istemi oluşturur, yanıtı okur ve selamlamayı yazdırır. Standart giriş/çıkış, tam bir proje gibi aynıdır.

Tim'in belirttiği bir sınırlama: bu mod kesinlikle tek dosyalı. İki .cs dosyasının birbirine referans vermesi mümkün değil. Kodunuz, birden fazla dosyaya ihtiyacınız olacak kadar büyüdüğünde, bir projeye dönüştürme zamanı gelmiştir (videonun ilerleyen kısımlarında ele alınmıştır).

NuGet Paketlerini Dahil Etmek

[5:43 - 7:49] Bu, tek dosyalı yaklaşımın betik oluşturma için gerçekten faydalı hale geldiği yerdir. NuGet paketlerine doğrudan .cs dosyasının içinde, üst kısmında bir #r direktifi kullanarak referans verebilirsiniz:

#r "nuget:Spectre.Console, 0.54.0"
using Spectre.Console;

Console.Write("What is your name? ");
string name = Console.ReadLine();
AnsiConsole.MarkupLine($"Hello [red]{name}[/]");
#r "nuget:Spectre.Console, 0.54.0"
using Spectre.Console;

Console.Write("What is your name? ");
string name = Console.ReadLine();
AnsiConsole.MarkupLine($"Hello [red]{name}[/]");

#r "nuget:..." söz dizimi, çalışma zamanına belirtilen paketi derlemeden önce indirip referans vermesini söyler. Tim, çıktıyı renklendirmek için Spectre.Console kullanarak selamlama metnini kırmızıya çevirir.

Ne bir dotnet add package komutu, ne düzenlenecek bir .csproj, ne de geri yükleme adımı. Paket referansı, kaynak dosyanın içinde yer alır. Bir HTTP istemcisine, bir JSON serileştiricisine veya bir biçimlendirme kütüphanesine ihtiyaç duyan betikler için bu, yalnızca bir bağımlılığı çekmek için bir proje oluşturma yükünü ortadan kaldırır.

Yerel Bir Çalıştırılabilir Dosyaya Yayınlama

[7:49 - 8:59] Dosya tabanlı bir betiği bağımsız bir ikili dosya olarak dağıtmak istediğinizde, yayın komutu bu işi halleder:

dotnet publish file demo.cs
dotnet publish file demo.cs

Bu, artifacts klasöründe bir çalıştırılabilir dosya üretir. Derlenmiş ikili dosya, çalıştırmak için gereken her şeyi içerir; hedef makinede .NET SDK gerekmez. Tim, dosya tabanlı derlemelerin varsayılan olarak Native AOT kullandığını ve bunun, hızlı başlatma süreleri ile tek bir kendi kendine yeterli ikili dosya çıktısı anlamına geldiğini belirtir.

Eğer Native AOT belirli bir kütüphane ile uyumluluk sorunlarına neden oluyorsa, dosyanın üst kısmına bir özellik direktifi ekleyerek bunu devre dışı bırakabilirsiniz (paketler için #r ile benzer şekilde). Ancak çoğu betik kullanımı için, AOT doğru varsayılandır.

Tam Bir Projeye Dönüştürme

[8:59 - 10:45] Bir betik tek dosya formatını aştığında kullanılacak kaçamak komutu dönüştürme komutudur:

dotnet project convert file demo.cs
dotnet project convert file demo.cs

Bu, #r direktiflerinden gelen NuGet paketi referanslarını içeren bir .csproj dosyası üretir ve kodu standart bir proje yapısına taşır. Bu noktadan itibaren, birden fazla dosya ekleyebilir, derleme ayarlarını yapılandırabilir ve .NET proje sisteminin tamamını kullanabilirsiniz.

Tim, bunu doğal bir ilerleme olarak çerçeveler: Hızlı deneyler için tek bir dosya ile başlayın ve kapsam genişledikçe yeniden yazma gerektirmeden bir projeye terfi edin. #r direktifleri, oluşturulan .csproj içinde <PackageReference> gibi düzgün bir şekilde çevrilir.

Native AOT ve Platform Notları

[10:45 - 12:42] Varsayılan olarak, dosya tabanlı yürütme Native AOT ile derlenir ve mümkün olan en hızlı başlangıç sürelerini üretir. Tim, bunun soğuk başlatma performansının önemli olduğu CLI araçları ve betikler için ideal olduğunu not eder. Bir kütüphane AOT uyumlu değilse, bu özellik dosya düzeyinde bir özellik ile devre dışı bırakılabilir.

Linux ve macOS'ta, ayrıca .cs dosyasının üstüne bir hashbang (#!/usr/bin/dotnet run file) ekleyerek, kabuktan doğrudan çalıştırılabilir hale getirirsiniz, dotnet run file önekini yazmadan. Bu, C#'ı bash, Python ve Ruby ile birlikte tamamen betikleme alanına getirir.

Sarma: C#'ı Bir Betik Dili Olarak

[12:42 - 13:05] Tim, küçük görevlerin üzerindeki proje yükünü ortadan kaldırmanın en önemli özelliği olarak vurgular. Konsol uygulamaları her zaman hızlı deneyler, otomasyon betikleri ve tek seferlik araçlar için başvurulan yöntem olmuştur. Dosya tabanlı yürütme, bunları ihtiyaç duyduklarından daha ağır hissetmelerini sağlayan töreni kaldırırken, C#'ı bir betik dilinin üzerine seçmeye değer kılan her avantajı (tür güvenliği, performans, NuGet ekosistemi) korur.

Sonuç

[13:05 - 13:36] Özetlemek gerekirse: .NET 10'un dosya tabanlı yürütmesi, tek bir .cs dosyasını dotnet run file ile çalıştırmanıza, #r direktifleri ile NuGet paketlerine referans vermenize, dotnet publish file ile yerel bir ikili dosyaya yayımlamanıza ve tek dosya formatından çıktığınızda dotnet project convert file ile tam bir projeye dönüştürmenize olanak tanır. Native AOT varsayılan olarak açıktır ve Linux/macOS kullanıcıları için shell seviyesinde yürütme için hashbang desteği vardır.

Şu anda bir konsol uygulamasını prototip veya otomasyon için kullanmakta olduğunuz herhangi bir şey için, bu daha hafif bir alternatif olarak denemeye değer.

Örnek İpucu: Bir NuGet paketini test etmek veya bir API çağrısını hata ayıklamak için sadece konsol uygulamaları oluşturuyorsanız, bunun yerine dosya tabanlı yürütmeyi deneyin. Bir .cs dosyası oluşturun, üstüne #r "nuget:PackageName, Version" ekleyin, test kodunuzu yazın ve dotnet run file ile çalıştırın. İşiniz bittiğinde, dosyayı silin. Proje temizliği gerekmiyor.

Tam videoyu YouTube'daki kanalında izleyerek modern C# geliştirme iş akışları hakkında daha fazla bilgi edinin.

Hero Worlddot related to .NET 10'da Dosya Tabanlı C# Çalıştırma
Hero Affiliate related to .NET 10'da Dosya Tabanlı C# Çalıştırma

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara