Entwicklung & Code
Neu in .NET 9.0 [28]: Feature-Flags
Mit der neuen Annotation [FeatureSwitchDefinition]
kann man Bezug auf eine vom Namen her selbst gewählte Projekteinstellung in der Projektdatei nehmen und für bedingte Kompilierung sorgen. Das bedeutet, dass beim Einsatz von Trimming/AOT der Programmcode für deaktivierte Features nicht übersetzt wird.
Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.
(Bild: coffeemill/123rf.com)
Das Programm steht fest: 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. Frühbuchertickets sind im Online-Shop erhältlich.
Im konkreten Beispiel funktioniert das so: Wenn der Feature-Switch "ColorPrinting.IsSupported"
auf false
steht, wird die Methode Print()
beim Trimming entfernt, denn sie wird lediglich an einer Stelle aufgerufen, bedingt von der Eigenschaft IsSupported
in der Klasse ColorPrinting
.
using System.Diagnostics.CodeAnalysis;
using ITVisions;
namespace NET9_Console.FCL90
{
public class ColorPrinting
{
[FeatureSwitchDefinition("ColorPrinting.IsSupported")] // liest Wert aus RuntimeHostConfigurationOption
internal static bool IsSupported => AppContext.TryGetSwitch("ColorPrinting.IsSupported", out bool isEnabled) ? isEnabled : true;
///
internal static void Print(string s)
{
CUI.Print(s, ConsoleColor.Yellow);
}
}
///
class FCL9_FeatureSwitches
{
public void Run()
{
CUI.Demo(nameof(FCL9_FeatureSwitches));
Console.WriteLine("ColorPrinting.IsSupported=" + ColorPrinting.IsSupported);
// Bedingung auf Feature Switch
if (ColorPrinting.IsSupported)
{
// Dieser Aufruf und damit die ganze Methode Print() wird beim Trimming entfernt, wenn ColorPrinting.IsSupported=false
ColorPrinting.Print("Ausgabe in Farbe");
}
else
{
CUI.Print("Keine Farbe");
}
}
}
}
Folgendermaßen aktiviert man obiges Feature durch einen Eintrag in der Projektdatei. Jetzt wird die Methode Print()
in der Klasse ColorPrinting
beim Trimming nicht entfernt:
Wenn das Feature aktiviert ist, erscheint der Text farbig.
Folgendermaßen deaktiviert man obiges Feature durch einen Eintrag in der Projektdatei. Jetzt wird das Trimming die Methode Print()
aus der Klasse ColorPrinting
entfernen:
Wenn das Feature deaktiviert ist, erscheint der Text nicht farbig.
(rme)