<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>.NET 11 | The .NET Blog</title><link>https://thedotnetblog.com/de/tags/.net-11/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>de</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/de/tags/.net-11/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 11 behebt endlich die Prozess-API</title><link>https://thedotnetblog.com/de/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/de/news/emiliano-montesdeoca/dotnet-11-process-api-improvements-runandcapturetext/</guid><description>System.Diagnostics.Process bekommt sein größtes Update seit Jahren. RunAndCaptureTextAsync, KillOnParentExit, SafeProcessHandle-APIs und volle Kontrolle über Standard-Handle-Umleitung — kein Deadlock-Boilerplate mehr.</description><content:encoded>&lt;p&gt;Jeder .NET-Entwickler, der jemals einen Prozess starten und seine Ausgabe erfassen musste, hat irgendeine Variante desselben gefährlichen Boilerplate-Codes geschrieben: async-Lesen von stdout, async-Lesen von stderr, &lt;code&gt;WaitForExitAsync&lt;/code&gt; — und bloß nicht vergessen, beide Streams zu leeren, sonst gibt es einen Deadlock. Es ist eine bekannte Falle, die seit Jahren besteht.&lt;/p&gt;
&lt;p&gt;.NET 11 behebt das endlich ordentlich.&lt;/p&gt;
&lt;h2 id="runandcapturetextasync"&gt;RunAndCaptureTextAsync&lt;/h2&gt;
&lt;p&gt;Die wichtigste Ergänzung: eine einzelne statische Methode, die einen Prozess startet, stdout und stderr erfasst und auf das Beenden wartet — ohne Deadlock.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAndCaptureTextAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;dotnet&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;--version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StandardOutput&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ein einziger Aufruf. Kein manuelles Leeren der Streams. Kein sorgfältig positioniertes &lt;code&gt;WaitForExit&lt;/code&gt;. Wenn Sie einfach etwas ausführen und dessen Ausgabe erhalten müssen, ist das die API, die Sie wollen.&lt;/p&gt;
&lt;p&gt;Es gibt auch &lt;code&gt;Process.RunAsync&lt;/code&gt; für den Fall, dass Sie auf das Beenden warten möchten, ohne die Ausgabe zu erfassen.&lt;/p&gt;
&lt;h2 id="killonparentexit"&gt;KillOnParentExit&lt;/h2&gt;
&lt;p&gt;Ein häufiges Problem mit gestarteten Prozessen: Wenn der übergeordnete Prozess abstürzt oder beendet wird, laufen die untergeordneten Prozesse als Waisen weiter. &lt;code&gt;KillOnParentExit&lt;/code&gt; ermöglicht es Ihnen, beim Start des Prozesses anzugeben, dass der untergeordnete Prozess beendet werden soll, wenn der übergeordnete Prozess beendet wird.&lt;/p&gt;
&lt;p&gt;Diese Funktion existierte auf plattformspezifische Weise (Job Objects unter Windows, prctl unter Linux), erforderte aber p/invoke oder Drittanbieter-Bibliotheken zur Verwendung aus .NET. Jetzt ist es eine erstklassige Eigenschaft von &lt;code&gt;ProcessStartInfo&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="safeprocesshandle-basierte-apis"&gt;SafeProcessHandle-basierte APIs&lt;/h2&gt;
&lt;p&gt;Die neue leichtgewichtige API-Oberfläche ist um &lt;code&gt;SafeProcessHandle&lt;/code&gt; anstelle der vollständigen &lt;code&gt;Process&lt;/code&gt;-Klasse aufgebaut. Die vollständige &lt;code&gt;Process&lt;/code&gt;-Klasse trägt viel Zustand und ist schwer zu trimmen — der &lt;code&gt;SafeProcessHandle&lt;/code&gt;-Pfad ist trimmer-freundlicher für Anwendungen, die die Ausgabegröße minimieren müssen (WASM, native AOT).&lt;/p&gt;
&lt;h2 id="vollständige-kontrolle-über-handle-vererbung"&gt;Vollständige Kontrolle über Handle-Vererbung&lt;/h2&gt;
&lt;p&gt;Das Update fügt auch eine feinkörnige Kontrolle darüber hinzu, welche Handles ein untergeordneter Prozess erbt und wie Standard-Handles umgeleitet werden. Bisher konnte man stdin/stdout/stderr umleiten, aber nicht genau festlegen, welche Handles auf Betriebssystemebene vererbt werden sollen. Die neuen APIs machen diese Kontrolle zugänglich.&lt;/p&gt;
&lt;h2 id="warum-das-wichtig-ist"&gt;Warum Das Wichtig Ist&lt;/h2&gt;
&lt;p&gt;Die &lt;code&gt;Process&lt;/code&gt;-Klasse wird in Tooling, Build-Systemen, Test-Runnern und jeder Anwendung verwendet, die andere Executables aufruft. Die alte API-Oberfläche stammte noch aus .NET Framework und zeigte ihr Alter. Das ist keine Breaking Change — die alten APIs funktionieren weiterhin — aber neuer Code sollte die neue Oberfläche bevorzugen.&lt;/p&gt;
&lt;p&gt;Für getrimte Anwendungen oder AOT-Kompilierungsszenarien ist der &lt;code&gt;SafeProcessHandle&lt;/code&gt;-Pfad besonders willkommen. Die alte &lt;code&gt;Process&lt;/code&gt;-Klasse brachte viel reflektionslastigen Code mit, der das Trimmen erschwerte.&lt;/p&gt;
&lt;p&gt;Original-Post: &lt;a href="https://devblogs.microsoft.com/dotnet/process-api-improvements-in-dotnet-11/"&gt;Process API Improvements in .NET 11&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>.NET 11 Preview 4: MCP-Server-Vorlage, Runtime-Async-Bibliotheken, Prozess-API</title><link>https://thedotnetblog.com/de/news/emiliano-montesdeoca/dotnet-11-preview-4-mcp-template-runtime-async-process-api/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/de/news/emiliano-montesdeoca/dotnet-11-preview-4-mcp-template-runtime-async-process-api/</guid><description>.NET 11 Preview 4 ist verfügbar. Die Highlights: die MCP-Server-Vorlage im SDK, mit Runtime-Async kompilierte Laufzeitbibliotheken, dotnet watch für Mobile und eine umfangreiche Erweiterung der Prozess-API.</description><content:encoded>&lt;p&gt;.NET 11 Preview 4 ist verfügbar. Jede Hauptversion einer .NET-Preview fügt eine lange Liste von Elementen über Runtime, SDK, Bibliotheken, ASP.NET Core, MAUI, C# und Entity Framework hinzu. Anstatt die vollständige Liste zu wiederholen, hier die Dinge, die mir aufgefallen sind.&lt;/p&gt;
&lt;h2 id="die-mcp-server-vorlage-kommt-ins-net-sdk"&gt;Die MCP-Server-Vorlage kommt ins .NET SDK&lt;/h2&gt;
&lt;p&gt;Das interessanteste Element: Eine MCP-Server-Projektvorlage ist jetzt im SDK enthalten. Das bedeutet, dass &lt;code&gt;dotnet new mcp-server&lt;/code&gt; (oder wie der Befehl letztendlich heißen wird) ohne zusätzliche Konfiguration funktioniert. Für alle, die MCP-Tooling in .NET entwickeln, reduziert das den Aufwand für den Einstieg erheblich. Die MCP-Integration in die Plattform-Toolchain signalisiert die Richtung, in die das Ökosystem geht.&lt;/p&gt;
&lt;h2 id="laufzeitbibliotheken-mit-runtime-async-kompiliert"&gt;Laufzeitbibliotheken mit Runtime-Async kompiliert&lt;/h2&gt;
&lt;p&gt;Die Laufzeit selbst kompiliert jetzt ihre Standardbibliotheken mit der Runtime-Async-Funktion. Das ist eine interne Änderung, die die Performance betrifft — Async-Zustandsmaschinen in der Laufzeit werden effizienter. Die Bedeutung liegt nicht in sichtbaren API-Änderungen; es ist vielmehr, dass Runtime-Async reif genug ist, um für die BCL selbst verwendet zu werden, was ein bedeutsames Signal über die Bereitschaft der Funktion ist.&lt;/p&gt;
&lt;h2 id="jit-optimierungen-und-hardware-intrinsics"&gt;JIT-Optimierungen und Hardware-Intrinsics&lt;/h2&gt;
&lt;p&gt;Preview 4 setzt die JIT-Arbeit fort. Verbesserungen bei Hardware-Intrinsics und der Codegenerierung werden hier geliefert — Details finden sich in den Runtime-Versionshinweisen. Diese Art von Änderungen verbessert typischerweise den Durchsatz bei rechenintensiven Schleifen, ohne dass Code-Änderungen Ihrerseits erforderlich sind.&lt;/p&gt;
&lt;h2 id="erweiterung-der-prozess-api"&gt;Erweiterung der Prozess-API&lt;/h2&gt;
&lt;p&gt;Ein umfangreiches Update für &lt;code&gt;System.Diagnostics.Process&lt;/code&gt; kommt in Preview 4:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Process.RunAndCaptureTextAsync&lt;/code&gt; — einen Prozess starten, stdout/stderr erfassen, auf das Ende warten, alles in einem Aufruf ohne Deadlock-Risiko&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KillOnParentExit&lt;/code&gt; — leichte Lebensdauer-Kopplung zwischen Eltern- und Kindprozessen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SafeProcessHandle&lt;/code&gt;-basierte APIs, die trimmer-freundlicher sind&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wenn Sie jemals Boilerplate geschrieben haben, um Prozessausgaben ohne Deadlocks zu erfassen (asynchrones Lesen von stdout &lt;em&gt;und&lt;/em&gt; stderr gleichzeitig), ist &lt;code&gt;RunAndCaptureTextAsync&lt;/code&gt; die API, die Ihnen fehlte.&lt;/p&gt;
&lt;h2 id="dotnet-watch-für-android-und-ios"&gt;dotnet watch für Android und iOS&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;dotnet watch&lt;/code&gt; unterstützt jetzt die Geräteauswahl für .NET MAUI Android- und iOS-Projekte. Schnellere Iteration auf Mobilgeräten ohne manuelle Verwaltung von Geräteverbindungen im Build-Loop.&lt;/p&gt;
&lt;h2 id="span-basierte-komprimierungs-apis"&gt;Span-basierte Komprimierungs-APIs&lt;/h2&gt;
&lt;p&gt;Neue span-basierte Deflate-, ZLib- und GZip-Encoder-/Decoder-APIs kommen in die Bibliotheken. Weniger Allokationen beim Umgang mit komprimierten Daten — relevant, wenn Sie hochdurchsatzfähige Datenverarbeitung betreiben.&lt;/p&gt;
&lt;h2 id="ausprobieren"&gt;Ausprobieren&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://dotnet.microsoft.com/download/dotnet/11.0"&gt;.NET 11 Preview 4 herunterladen&lt;/a&gt; — es ist eine Preview, nicht produktionsreif, aber es lohnt sich, sie gegen Ihre Projekte zu testen, um Probleme frühzeitig vor dem RC-Zyklus zu erkennen.&lt;/p&gt;
&lt;p&gt;Originalpost: &lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-11-preview-4/"&gt;.NET 11 Preview 4 is now available!&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>