Microsoft, C# dosyalarını doğrudan çeviren ve başlatan dosya tabanlı uygulamaları çağırır. Microsoft, genellikle .csproj proje dosyasında bulunan bilgiler için kendi dosya tabanlı uygulama söz dizimini kullanıma sundu.
Duyurudan sonra devamını okuyun
Dr. Holger Schwichtenberg, 53 tanınmış uzmanıyla çok sayıda orta ve büyük ölçekli şirketi danışmanlık, eğitim ve yazılım geliştirme yoluyla destekleyen www.IT-Visions.de uzman ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası konferansa katılımı, 90'dan fazla uzmanlık kitabı ve 1.500'den fazla uzmanlık makalesi sayesinde Holger Schwichtenberg, .NET ve web teknolojileri konusunda Almanya'nın en tanınmış uzmanlarından biridir.
Sözdizimi pound sembolüyle başlar # (C#'da bir önişlemci yönergesi) ardından iki nokta üst üste gelir (C# derleyicisinin bakış açısından, göz ardı edilecek bir yönerge):
- SDK Tanımı:
#:sdk Microsoft.NET.Sdk.Web. SDK'yı belirtirken Önizleme 6'dan başlayarak @'dan sonra sürüm numarasını da belirtebilirsiniz; örneğin#:sdk [email protected] - NuGet paketine referans:
#:package [email protected].* - Proje referansı:
#:project ./ClassLib/ClassLib.csproj - Özellikler oluşturun, ör. B. Sürüm numarası:
#:property Version=1.1.2(Önizleme 6'dan önce eşittir işareti yoktu, ancak ayırıcı olarak boşluklar vardı) - Dosya tabanlı uygulamalar standart olarak NativeAOT derleyicisini kullanır. Eğer onu yanına alırsan
#:property PublishAot=falsedevre dışı bırakılırsa, tam zamanında derleyici kullanılır.

NuGet.org'da artık her paket için, paketi bağımsız bir C# dosyasına entegre etmeye yönelik uygun sözdizimine sahip bir “Dosya Tabanlı Uygulamalar” sekmesi bulunmaktadır (Şekil 1).
Dosya tabanlı uygulamaların diğer özellikleri şunları içerir:
- Dosya tabanlı uygulamanızın ayarlarıyla aynı klasörde bir .settings.json dosyası oluşturabilirsiniz.
- Aynı klasördeki .run.json dosyasında dosya tabanlı uygulamanız için bir başlatma profili oluşturabilirsiniz.
- Evet yapabilir
dotnet build Dateiname.csVEYAdotnet restore Dateiname.csgerçekleştirmek. - Bu tür dosya tabanlı uygulamaları kullanabilirsiniz
dotnet publish csyürütülebilir bir dosyada (.EXE). - Önizleme 6'dan itibaren geliştiriciler dosya konumunu dosya tabanlı bir uygulama içinde görüntüleyebilir
AppContext.GetData("EntryPointFileDirectoryPath")ve yürütülen C# dosyasının tüm yoluGetData("EntryPointFilePath")belirlemek. Ancak normal proje tabanlı C# uygulamalarıyla değil, yalnızca dosya tabanlı uygulamalarla çalışır.
Duyurudan sonra devamını okuyun
Ancak .NET 10.0'da başka bir .cs dosyasını doğrudan dosya tabanlı bir uygulamaya entegre etmek henüz mümkün değildir. Bu .NET 11.0 için planlanmıştır.
Aşağıdaki kod, başvurulan iki NuGet paketine sahip dosya tabanlı bir uygulamanın örneğini gösterir:
#!/usr/bin/env dotnet
#region Einstellungen für File-based App
// https://www.nuget.org/packages/humanizer/
#:package [email protected]
// https://www.nuget.org/packages/Spectre.Console/
#:package Spectre.Console@0.*
#:property LangVersion=preview
#:property Version=1.2.0
#:project ./ClassLibrary/ClassLibrary.csproj
#endregion
using Spectre.Console;
using Humanizer;
var title = "C# Script v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version +
" mit " + System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription + "n" +
AppContext.GetData("EntryPointFilePath");
// Header
AnsiConsole.Write(
new Panel(title)
.Header("[yellow]File-based App[/]", Justify.Center)
.Border(BoxBorder.Rounded)
.BorderStyle(new Style(foreground: Color.Green))
.Padding(1, 1, 1, 1)
);
// Parameter auflisten
foreach (var arg in args)
{
Console.WriteLine($"Argument: {arg}");
}
Console.WriteLine();
// Daten
(Data net80, Data net90, Data net10) = GetData();
// Textausgabe in Wochen
var dotNet8Released = DateTimeOffset.Parse(net80.Release);
TimeSpan dotNet8Since = DateTimeOffset.Now - dotNet8Released;
Console.WriteLine($"It has been {dotNet8Since.Humanize()} since .NET {net80.Version} was released.");
var dotNet9Released = DateTimeOffset.Parse(net90.Release);
TimeSpan dotNet9Since = DateTimeOffset.Now - dotNet9Released;
Console.WriteLine($"It has been {dotNet9Since.Humanize()} since .NET {net90.Version} was released.");
var dotNet10Released = DateTimeOffset.Parse(net10.Release);
TimeSpan dotNet10Since = DateTimeOffset.Now - dotNet10Released;
Console.WriteLine($"{dotNet10Since.Humanize()} since .NET {net10.Version} release.");
Console.WriteLine();
// Zeichne Balken für die Anzahl der Tage seit der Veröffentlichung
var bar = new BarChart()
.Width(100)
.AddItem("Days since .NET 8.0 release", dotNet8Since.TotalDays, Color.Red)
.AddItem("Days since .NET 9.0 release", dotNet9Since.TotalDays, Color.Blue)
.AddItem("Days since .NET 10.0 release", dotNet10Since.TotalDays, Color.Purple);
AnsiConsole.Write(bar);
Console.WriteLine();
// Lokale Funktion
static (Data, Data, Data) GetData()
{
var net80 = new Data
{
Version = "8.0",
Release = "2023-11-14"
};
var net90 = new Data
{
Version = "9.0",
Release = "2024-11-12"
};
var net10 = new Data
{
Version = "10.0",
Release = "2025-11-11"
};
return (net80, net90, net10);
}
// Datenklasse
class Data
{
public required string Version { get; set; }
public string Release { get; set; }
}

Ekran görüntüsü, örnek kodu başlatırken çıkan çıktıyı gösterir (Şekil 2).
(Ben)

Bir yanıt yazın