Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De doelframeworkgerelateerde DefineConstants items (zoals NET, NET9_0_OR_GREATER, en NETSTANDARD2_0, en vergelijkbare constanten) worden niet meer berekend tijdens de MSBuild-evaluatie. Het gebruik van deze constanten in MSBuild-kenmerken Condition in uw projectbestand werkt niet meer zoals verwacht.
Geïntroduceerde versie
.NET 10
Vorig gedrag
DefineConstants Voorheen waren waarden zoals NET, NETFRAMEWORKen NETSTANDARD (met optionele versie en _OR_GREATER achtervoegsels, zoals NET452_OR_GREATER of NET9_0_OR_GREATER) beschikbaar tijdens de MSBuild-evaluatie. Hierdoor kunt u ze rechtstreeks gebruiken in Condition kenmerken in uw projectbestand:
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Nieuw gedrag
Vanaf .NET 10 worden de doelframeworkwaarden DefineConstants berekend in een Target, niet tijdens de MSBuild-evaluatie. Als gevolg hiervan worden Condition kenmerken die DefineConstants op TFM-gerelateerde waarden controleren geëvalueerd voordat deze waarden zijn ingesteld en worden ze niet meer zoals verwacht geactiveerd.
De volgende voorwaarde wordt bijvoorbeeld niet meer correct geëvalueerd omdat NET9_0_OR_GREATER niet aanwezig is in DefineConstants op het evaluatietijdstip.
<!-- This no longer works as expected -->
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Type van brekende verandering
Deze wijziging is een gedragswijziging.
Reden voor wijziging
Directe toegang of manipulatie van DefineConstants heeft ertoe geleid dat gebruikers per ongeluk de waarden overschrijven. Bovendien maakt het verplaatsen van de berekening naar een Target complexere MSBuild-indelingsscenario's mogelijk die vereist zijn voor andere hulpprogramma's.
Aanbevolen actie
Inspecteer niet op
DefineConstantsTFM-gerelateerde waarden (bijvoorbeeldNET9_0_OR_GREATER,NETSTANDARD2_0, en vergelijkbare) in MSBuild-kenmerkenConditiontijdens de evaluatie.Gebruik de gedocumenteerde MSBuild
TargetFrameworkenTargetPlatformfuncties om te controleren op compatibiliteit met het doelframework. Voorbeeld:<!-- 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>Blijf kenmerken gebruiken in
DefineConstantsattributen voor constanten die u zelf definieert en beheertCondition. Deze wijziging is alleen van invloed op de TFM-gerelateerde constanten die automatisch door de SDK worden ingesteld.
Betreffende API's
Geen.