.NET 10.0 Preview 5 bringt XAML-Vereinfachungen und Post-Quanten-Kryptographie
Neben vielen kleinen Neuerungen vereinfacht Microsoft in Preview 5 von .NET 10.0 die XAML-Namensräume in .NET MAUI und die Grid-Definition in WPF.
(Bild: Pincasso/Shutterstock.com)
- Dr. Holger Schwichtenberg
.NET 10.0 Preview 5 steht zum Herunterladen auf der .NET-Downloadseite bereit. FĂĽr Visual Studio 2022 gab es nur ein Bugfix-Update von Version 17.14.4 auf 17.14.5.
Weiterhin ist .NET 10.0 nicht direkt ĂĽber das Visual-Studio-Setup-Programm installierbar (siehe Abbildung). Wenn das .NET 10.0 SDK getrennt installiert wurde, erscheint aber ".NET 10.0 Preview" in den Auswahlmasken. Anwenderinnen und Anwender finden es auf der Downloadseite.
(Bild:Â Screenshot (Holger Schwichtenberg))
Vereinfachungen für XAML-Namensräume in .NET MAUI
In Microsofts Cross-Platform-GUI-Framework .NET MAUI (Multi-Platform App UI) hat Microsoft zwei Vereinfachungen für die lästigen Namensraumdeklarationen zu Beginn einer XAML-Datei eingebaut. Entwicklerinnen und Entwickler können die notwendigen Namensraumdeklarationen übergreifend über alle XAML-Dateien zentral bereitstellen, in einer Datei mit Namen GlobalXmlns.cs.
[assembly: XmlnsDefinition(
"http://schemas.microsoft.com/dotnet/maui/global",
"MyApp.Views")]
[assembly: XmlnsDefinition(
"http://schemas.microsoft.com/dotnet/maui/global",
"MyApp.Controls")]
[assembly: XmlnsDefinition(
"http://schemas.microsoft.com/dotnet/maui/global",
"MyApp.Converters")]
[assembly: XmlnsDefinition(
"http://schemas.microsoft.com/dotnet/maui/global",
"http://schemas.syncfusion.com/maui/toolkit")]
Listing: Beispiel fĂĽr eine Datei GlobalXmlns.cs
In der XAML-Datei reicht es dann, nur noch die Namensräume http://schemas.microsoft.com/dotnet/maui/global und http://schemas.microsoft.com/winfx/2009/xaml einzubinden:
<ContentPage
xmlns="http://schemas.microsoft.com/dotnet/maui/global"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.MainPage">
<TagView x:DataType="Tag" />
</ContentPage>
Aber auch das lässt sich noch weiter zusammendampfen, indem man in der Projektdatei (.csproj) die implizite Namensraumdeklaration aktiviert:
<PropertyGroup>
<DefineConstants>$(DefineConstants);MauiAllowImplicitXmlnsDeclaration</DefineConstants>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
</PropertyGroup>
Danach können die einzelnen XAML-Dateien auf jegliche Namensraumverweise verzichten:
<ContentPage x:Class="MyApp.MainPage">
<TagView x:DataType="Tag" />
</ContentPage>
Nicht verzichten können Entwicklerinnen und Entwickler aber auf das Prefix x: vor Class und DataType.
Die .NET-MAUI-Projektvorlage gibt es in .NET 10.0 Preview 5 zwar bereits als eine Datei GlobalXmlns.cs, diese wird aber noch nicht verwendet (siehe Abbildung). Entwicklerinnen und Entwickler können die implizite Namensraumdeklaration aber leicht in der Projektdatei (.csproj) nachtragen und dann die Namensräume aus App.xaml, AppShell.xaml, MainPage.xaml und anderen entfernen.
(Bild:Â Screenshot (Holger Schwichtenberg))
Um diese neuen Features zu probieren, ist erforderlich, nach der Installation des .NET 10.0 Preview 5 Software Development Kit (SDK) auch noch .NET MAUI auf den aktuellen Stand zu bringen, via SDK-Workload-Installation:
dotnet workload install maui
Zum Kompilieren braucht man auch noch die aktuelle Version 36 des Android SDK, was aber im Rahmen des ersten Kompiliervorgangs automatisch installiert wird.
Videos by heise
XAML-Vereinfachungen auch fĂĽr WPF
Auch dem etablierten GUI-Framework "Windows Presentation Foundation" (WPF) spendiert Microsoft in .NET 10.0 Preview 5 eine Vereinfachung in der XAML-Syntax. Zur Deklaration von Zeilen und Spalten in einem <Grid>-Steuerelement gibt es nun die neuen Eigenschaften RowDefinitions und ColumnDefinitions, zum Beispiel fĂĽr drei Zeilen und zwei Spalten:
<Grid RowDefinitions="Auto,*,20" ColumnDefinitions="*, Auto">
<TextBlock Text="Row 0, Col 0" Grid.Row="0" Grid.Column="0" />
<TextBlock Text="Row 1, Col 1" Grid.Row="1" Grid.Column="1" />
<TextBlock Text="Row 2, Col 0" Grid.Row="2" Grid.Column="0" />
</Grid>
Bisher musste die Zeilen- und Spaltendefinition in WPF in ausschweifender Tag-Folge mit <ColumnDefinition> und <RowDefinition> geschehen:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Row 0, Col 0" Grid.Row="0" Grid.Column="0"/>
<TextBlock Text="Row 1, Col 1" Grid.Row="1" Grid.Column="1"/>
<TextBlock Text="Row 2, Col 0" Grid.Row="2" Grid.Column="0"/>
</Grid>
Die neue Syntax ĂĽbernimmt ein bestehendes XAML-Feature aus der Windows UI Library (WinUI), das es auch in den XAML-Frameworks der Anbieter Uno Platform und Avalonia schon lange gibt.
In Visual Studio 2022 Version 17.14.5 wird die neue Syntax für die Spalten- und Zeilendefinition im WPF-Designer zwar berücksichtigt, es fehlen aber die sichtbaren Zellgrenzen für alle Zellen inklusive der Möglichkeit der visuellen Änderung der Zellgrößen. Es wird nur noch die Zellgrenze für die aktuell angewählte Zelle gezeigt (siehe folgende Abbildungen) – die anderen Hilfslinien und die Größenänderungen fehlen.
(Bild:Â Screenshot (Holger Schwichtenberg))
(Bild:Â Screenshot (Holger Schwichtenberg))
DarĂĽber hinaus gibt es in WPF einige Fehlerbeseitigungen im Fluent Design, siehe Release Notes.
BerĂĽcksichtigung der XML-Kommentare <returns> in OpenAPI-Dokumenten
Die von dem NuGet-Paket Microsoft.AspNetCore.OpenApi generierten OpenAPI-Metadaten fĂĽr eine ASP.NET-Core-basierte Web-API berĂĽcksichtigen schon seit .NET 10.0 Preview 2 Informationen aus den XML-Kommentaren, die zu Klassen oder Methoden hinterlegt sind. Allerdings wurde das Tag <returns> bisher ignoriert.
Das ist in Preview 5 behoben: Der Inhalt des Tags <returns> (siehe Listing) wandert in responses/description im JSON-Dokument (siehe Abbildung).
using Microsoft.AspNetCore.Mvc;
namespace NET10_WebAPIController.Controllers;
/// <summary>
/// Der Wettervorhersage-Controller stellt Wetterdaten zur VerfĂĽgung.
/// </summary>
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries =
[
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
];
…
/// <summary>
/// Diese Operation liefert die Wettervorhersage für die nächsten x Tage
/// </summary>
/// <remarks>Die Wetterdaten sind zufällig im RAM erzeugt ;-)</remarks>
/// <returns>Liste von WeatherForecast-Objekten</returns>
/// <param name="city">Stadt</param>
/// <param name="days">Anzahl der Tage</param>
/// <returns>Liste von WeatherForecast-Objekten</returns>
[HttpGet]
[Route("/weatherforecast/")]
[Route("/weatherforecast/{city}/{days}")]
[ProducesResponseType<IEnumerable<WeatherForecast>>(StatusCodes.Status200OK, Description = "Wettervorhersage für die nächsten x Tage")]
public IEnumerable<WeatherForecast> GetWeatherForecast(string city = "", int days = 5)
{
return Enumerable.Range(1, days).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
Listing: WebAPI-Controller-Klasse mit XML-Kommentaren
(Bild:Â Holger Schwichtenberg)
(Bild:Â coffeemill/123rf.com)
Das nächste LTS-Release steht an: Auf der Online-Konferenz betterCode() .NET 10.0 am 18. November 2025 – ausgerichtet von iX und dpunkt.verlag in Kooperation mit IT-visions.de – präsentieren der Autor dieses Artikels, Dr. Holger Schwichtenberg, und weitere Experten die wichtigsten Neuerungen. Dazu zählen die Updates im .NET 10.0 SDK sowie in C# 14.0, ASP.NET Core 10.0, Blazor 10.0, Windows Forms 10.0, WPF 10.0, WinUI 3, .NET MAUI 10.0 und die Integration von Künstlicher Intelligenz in .NET-Anwendungen.
Das Programm ist noch nicht veröffentlicht – bis dahin sind vergünstigte Blind-Bird-Tickets bereits im Online-Shop erhältlich. Das Vorjahresprogramm lässt sich im Archiv einsehen.