Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les éléments liés au DefineConstants framework cible (tels que NET, , NET9_0_OR_GREATERNETSTANDARD2_0et constantes similaires) ne sont plus calculés au moment de l’évaluation MSBuild. L’utilisation de ces constantes dans les attributs MSBuild Condition dans votre fichier projet ne fonctionnera plus comme prévu.
Version introduite
.NET 10
Comportement antérieur
Auparavant, DefineConstants valeurs telles que NET, NETFRAMEWORK et NETSTANDARD (avec des versions facultatives et des suffixes _OR_GREATER, tels que NET452_OR_GREATER ou NET9_0_OR_GREATER) étaient disponibles pendant l'évaluation de MSBuild. Cela vous a permis de les utiliser directement dans Condition les attributs de votre fichier projet :
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Nouveau comportement
À compter de .NET 10, les valeurs du framework DefineConstants cible sont calculées dans un Target, et non pendant l’évaluation MSBuild. En conséquence, les attributs Condition qui vérifient les valeurs liées au TFM de DefineConstants sont évalués avant que ces valeurs ne soient définies et ne se déclenchent plus comme prévu.
Par exemple, la condition suivante n'est plus évaluée correctement, car NET9_0_OR_GREATER n'est pas présent dans DefineConstants lors de l'évaluation :
<!-- This no longer works as expected -->
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Type de changement cassant
Ce changement est un changement de comportement.
Raison du changement
La manipulation ou l'accès direct à DefineConstants a conduit les utilisateurs à écraser accidentellement les valeurs. En outre, transférer le calcul dans un Target permet des possibilités d'orchestration MSBuild plus complexes requises par d'autres outils.
Action recommandée
N’inspectez
DefineConstantspas les valeurs liées au TFM (par exemple,NET9_0_OR_GREATER,NETSTANDARD2_0et similaires) dans les attributs MSBuildConditionau moment de l’évaluation.Utilisez les fonctions MSBuild
TargetFrameworketTargetPlatformdocumentées pour vérifier la compatibilité de l’infrastructure cible. Par exemple:<!-- 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>Continuez à utiliser
DefineConstantsdansConditionles attributs pour les constantes que vous définissez et contrôlez vous-même. Cette modification affecte uniquement les constantes liées au module TFM que le Kit de développement logiciel (SDK) définit automatiquement.
API affectées
Aucun.