Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die zielframeworkbezogenen Elemente (z. B. DefineConstants, NET, NET9_0_OR_GREATER und NETSTANDARD2_0 ähnliche Konstanten) werden zur MSBuild-Auswertungszeit nicht mehr berechnet. Die Verwendung dieser Konstanten in MSBuild-Attributen Condition in Ihrer Projektdatei funktioniert nicht mehr wie erwartet.
Eingeführt in Version
.NET 10
Bisheriges Verhalten
DefineConstants Bisher waren Werte wie NET, NETFRAMEWORK und NETSTANDARD (mit optionalen Versionen und _OR_GREATER-Suffixen, z.B. NET452_OR_GREATER oder NET9_0_OR_GREATER) während der MSBuild-Auswertung verfügbar. Auf diese Weise können Sie sie direkt in Condition Attributen in Ihrer Projektdatei verwenden:
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Neues Verhalten
Ab .NET 10 werden die Zielframeworkwerte DefineConstants in einer Target, nicht während der MSBuild-Auswertung berechnet. Daher werden Condition Attribute, die DefineConstants auf TFM-bezogene Werte prüfen, ausgewertet, bevor diese Werte festgelegt werden und nicht mehr wie erwartet ausgelöst werden.
Die folgende Bedingung wird beispielsweise nicht mehr richtig ausgewertet, da NET9_0_OR_GREATER zum Zeitpunkt der Auswertung nicht in DefineConstants vorhanden ist.
<!-- This no longer works as expected -->
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Der direkte Zugriff oder die DefineConstants Manipulation führte dazu, dass Benutzer versehentlich die Werte überschrieben haben. Darüber hinaus ermöglicht das Verschieben der Berechnung in eine Target komplexere MSBuild-Orchestrierungsszenarien, die von anderen Tools benötigt werden.
Empfohlene Maßnahme
Überprüfen
DefineConstantsauf TFM-bezogene Werte (zNET9_0_OR_GREATER. B. ,NETSTANDARD2_0und ähnliche) in MSBuild-AttributenConditionzur Auswertungszeit.Verwenden Sie die dokumentierten MSBuild
TargetFramework- undTargetPlatform-Funktionen, um die Zielframeworkkompatibilität zu überprüfen. Beispiel:<!-- Condition on net9.0 or later (frameworks compatible with net9.0) --> <ItemGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net9.0'))"> <PackageReference Include="SomePackage" Version="1.0.0" /> </ItemGroup> <!-- Condition on frameworks not compatible with net8.0 --> <ItemGroup Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))"> <PackageReference Include="LegacyPackage" Version="2.0.0" /> </ItemGroup>DefineConstantsAttributeConditionfür Konstanten, die Sie selbst definieren und steuern. Diese Änderung wirkt sich nur auf die TFM-bezogenen Konstanten aus, die vom SDK automatisch festgelegt werden.
Betroffene APIs
Keiner.