Neu in .NET 9.0 [28]: Feature-Flags
Feature-Flags erlauben in .NET 9.0 die bedingte Kompilierung fĂĽr den Ahead-of-Time-Compiler.
(Bild: Pincasso/Shutterstock.com)
- Dr. Holger Schwichtenberg
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.
(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;
/// <summary>
/// Code, der ggf. bei Trimming/AOT entfernt wird, wenn ColorPrinting.IsSupported=false
/// </summary>
internal static void Print(string s)
{
CUI.Print(s, ConsoleColor.Yellow);
}
}
/// <summary>
/// [FeatureSwitchDefinition] fĂĽr Entfernen von Code bei Trimming/AOT
/// </summary>
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:
<!--Features Switches-->
<ItemGroup>
<!-- ColorPrinting wird in diesem Build benötigt -->
<RuntimeHostConfigurationOption Include="ColorPrinting.IsSupported" Value="true" Trim="true" />
</ItemGroup>
Videos by heise
FolgendermaĂźen deaktiviert man obiges Feature durch einen Eintrag in der Projektdatei. Jetzt wird das Trimming die Methode Print() aus der Klasse ColorPrinting entfernen:
<!--Features Switches-->
<ItemGroup>
<!-- ColorPrinting wird in diesem Build nicht benötigt und beim Trimming entfernt-->
<RuntimeHostConfigurationOption Include="ColorPrinting.IsSupported" Value="false" Trim="true" />
</ItemGroup>
(rme)