Blog
Eine Datei, ein Befehl: dotnet run app.cs
Emanuele Bartolesi

Fast jeden Tag habe ich das gleiche Problem: Ich möchte einfach nur eine schnelle Idee in C# ausprobieren. Vielleicht geht es darum, eine neue Bibliothek zu testen, ein einmaliges Skript zu schreiben oder einfach Hello, World zu drucken. Aber bisher war dieses kleine Experiment oft mit vielen Ritualen verbunden: Erstellen eines Projekts, Wiederherstellen von Paketen und Umgang mit Dateien, die man nicht wirklich braucht.
Mit der Einführung von dotnet run app.cs in dotnet 10 verschwindet diese Reibung. Sie können Ihren Editor öffnen, ein paar Zeilen Code eingeben und ihn sofort über das Terminal ausführen. Keine Projekteinrichtung, kein zusätzliches Kauderwelsch. Nur Sie und Ihr Code.
Verstehen dotnet run
Im Kern ist dotnet run ein einfacher Befehl. Er umschließt zwei separate Schritte:
- Erstellen Sie Ihre Anwendung - dies entspricht der Ausführung von
dotnet build. - Führen Sie Ihre Anwendung aus - dies entspricht dem Ausführen der kompilierten Assembly mit
dotnet exec.
Das heißt, wenn Sie tippen:
dotnet run
in einem Projektordner, erstellt die CLI Ihr Projekt (sofern es nicht bereits aktuell ist) und startet dann die Anwendung.
Erweitern auf einzelne Dateien
dotnet run app.cs führt dies weiter. Anstatt eine .csproj Datei zu benötigen, kann die CLI nun:
- Behandeln Sie eine einzelne C#-Datei als Einstiegspunkt.
- Kompilieren Sie es im Handumdrehen.
- Führen Sie ihn sofort aus.
Was früher auf Projekte beschränkt war, funktioniert jetzt für schnelle Experimente, Skripte und Unterrichtsbeispiele.
Eine einzelne Datei-App ausführen
Wie immer ist der einfachste Weg, dotnet run app.cs kennenzulernen, das klassische (und immergrüne) Hello, World-Programm zu schreiben.
// app.cs
Console.WriteLine("Hello, World from a single file!");
Führen Sie es direkt aus:
dotnet run app.cs
Kein Projektgerüst. Kein Wiederherstellungsschritt. Nur Code.
Warum ist das nützlich?
- Prototyping: Sie müssen ein C#-Snippet testen? Schreiben Sie es und führen Sie es aus.
- Lernen: Sie möchten jemandem, der neu in .NET ist, etwas beibringen? Kein Projekt-Overhead - nur eine Datei.
- Schnelle Skripte: Automatisieren Sie eine Aufgabe, ohne eine vollständige Lösung einzurichten.
Hinweis: Ich habe damit begonnen, viele meiner PowerShell-Skripte durch .NET zu ersetzen.
Ein echtes Skript: Aufruf der GitHub API
Lassen Sie uns weitergehen und die GitHub-API aufrufen, um ein Benutzerprofil abzurufen.
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
public sealed class GitHubUser
{
public string? login { get; set; }
public string? name { get; set; }
public string? company { get; set; }
public string? blog { get; set; }
public string? location { get; set; }
public string? bio { get; set; }
public int followers { get; set; }
public int following { get; set; }
public int public_repos { get; set; }
public DateTime created_at { get; set; }
}
var username = "kasuken";
var url = $"https://api.github.com/users/{username}";
using var http = new HttpClient();
http.DefaultRequestHeaders.UserAgent.ParseAdd("dotnet-run-app-demo");
// Optional: token for higher rate limits
var token = Environment.GetEnvironmentVariable("GITHUB_TOKEN");
if (!string.IsNullOrWhiteSpace(token))
{
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
using var resp = await http.GetAsync(url);
resp.EnsureSuccessStatusCode();
await using var stream = await resp.Content.ReadAsStreamAsync();
var user = await JsonSerializer.DeserializeAsync<GitHubUser>(
stream,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true }
);
Console.WriteLine($"""
👤 {user?.name} (@{user?.login})
🏢 {user?.company}
📍 {user?.location}
🔗 {user?.blog}
📝 {user?.bio}
Repos: {user?.public_repos}
Followers: {user?.followers} | Following: {user?.following}
Joined: {user?.created_at:yyyy-MM-dd}
""");
Führen Sie es direkt aus:
dotnet run app.cs
NuGet Pakete referenzieren
Sie können NuGet-Paketverweise direkt in Ihre .cs-Datei einfügen, indem Sie die Direktive #:package verwenden:
#:package Humanizer@2.14.1
using Humanizer;
var strangerThingsReleaseDate = DateTimeOffset.Parse("2016-07-15");
var since = DateTimeOffset.Now - strangerThingsReleaseDate;
Console.WriteLine($"It has been {since.Humanize()} since Stranger Things was released! 🍿");
Führen Sie es direkt aus:
dotnet run app.cs
Ausführbar machen
Auf Unix-basierten Systemen (Linux, macOS) können Sie Ihr Skript ausführbar machen, indem Sie ein Shebang (#!) am Anfang Ihrer Datei hinzufügen und die Ausführungserlaubnis festlegen.
#!/usr/bin/dotnet run
Console.WriteLine("Hello from a C# script!");
Machen Sie es ausführbar:
chmod +x app.cs
Führen Sie es direkt aus:
./app.cs
Wie Sie sich vorstellen können, eröffnet dies eine Vielzahl von Möglichkeiten für schnelle Skripte und Automatisierungsaufgaben. Sie können es in Cron-Jobs, CI/CD-Pipelines oder überall dort einsetzen, wo Sie ein leichtgewichtiges C#-Skript oder ein Shell- oder Python-Skript benötigen.
Verfasst von

Emanuele Bartolesi
Senior Cloud Engineer
Emanuele is a Senior Cloud Engineer and long-time community contributor, passionate about helping teams succeed with cloud, DevOps, and AI. Microsoft MVP for over 12 years, a GitHub Star for 4 years and GitHub Star of the Year 2023. Emanuele regularly blogs and speaks at international conferences, sharing his experience on GitHub, Azure, and modern software development practices. He is also active in the open-source community, creating tools to improve developer productivity and governance. Outside of work, he enjoys playing guitar, traveling, and pushing his limits through endurance sports like triathlons and marathons.
Contact




