Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli elementi correlati al DefineConstants framework di destinazione (ad esempio NET, NET9_0_OR_GREATERNETSTANDARD2_0, e costanti simili) non vengono più calcolati in fase di valutazione di MSBuild. L'uso di queste costanti negli attributi di MSBuild Condition nel file di progetto non funzionerà più come previsto.
Versione introdotta
.NET 10
Comportamento precedente
In precedenza, DefineConstants i valori come NET, NETFRAMEWORKe NETSTANDARD (con versione facoltativa e _OR_GREATER suffissi, ad esempio NET452_OR_GREATER o NET9_0_OR_GREATER) erano disponibili durante la valutazione di MSBuild. In questo modo è possibile usarli direttamente negli Condition attributi nel file di progetto:
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Nuovo comportamento
A partire da .NET 10, i valori del framework DefineConstants di destinazione vengono calcolati in una fase successiva, non durante la valutazione di MSBuild. Di conseguenza, Condition gli attributi che controllano DefineConstants i valori correlati a TFM vengono valutati prima che tali valori vengano impostati e di conseguenza non si attivano più come previsto.
Ad esempio, la condizione seguente non restituisce più correttamente perché NET9_0_OR_GREATER non è presente in DefineConstants in fase di valutazione:
<!-- This no longer works as expected -->
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Tipo di cambiamento che interrompe la compatibilità
Questa modifica è una modifica funzionale.
Motivo della modifica
L'accesso diretto o la manipolazione di DefineConstants hanno portato a sovrascrivere accidentalmente i valori. Inoltre, lo spostamento del calcolo in un Target consente scenari di orchestrazione MSBuild più complessi richiesti da altri strumenti.
Azione consigliata
Non esaminare
DefineConstantsi valori correlati a TFM (ad esempio,NET9_0_OR_GREATER,NETSTANDARD2_0e simili) negli attributi MSBuildConditionin fase di valutazione.Assicurati di usare le funzioni
TargetFrameworkeTargetPlatformdi MSBuild documentate per verificare la compatibilità del framework di destinazione. Per esempio:<!-- 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>Continuare a usare
DefineConstantsnegliConditionattributi per le costanti definite e controllate manualmente. Questa modifica influisce solo sulle costanti correlate a TFM impostate automaticamente dall'SDK.
Le API interessate
Nessuno.