Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os itens relacionados ao framework de destino DefineConstants (como NET, NET9_0_OR_GREATER, NETSTANDARD2_0 e constantes semelhantes) não são mais computados no tempo de avaliação do MSBuild. O uso dessas constantes em atributos do MSBuild Condition no arquivo de projeto não funcionará mais conforme o esperado.
Versão introduzida
.NET 10
Comportamento anterior
Anteriormente, DefineConstants valores como NET, NETFRAMEWORKe NETSTANDARD (com versão e _OR_GREATER sufixos opcionais, como NET452_OR_GREATER ou NET9_0_OR_GREATER) estavam disponíveis durante a avaliação do MSBuild. Isso permitiu que você os usasse diretamente em Condition, atributos em seu arquivo de projeto.
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Novo comportamento
A partir do .NET 10, os valores da estrutura de destino DefineConstants são computados em um Target, não durante a avaliação do MSBuild. Como resultado, Condition atributos que inspecionam DefineConstants valores relacionados a TFM são avaliados antes que esses valores sejam definidos e não disparam mais conforme o esperado.
Por exemplo, a seguinte condição não é mais avaliada corretamente porque NET9_0_OR_GREATER não está presente no DefineConstants momento da avaliação:
<!-- This no longer works as expected -->
<ItemGroup Condition="$(DefineConstants.Contains('NET9_0_OR_GREATER'))">
<PackageReference Include="SomePackage" Version="1.0.0" />
</ItemGroup>
Tipo de mudança disruptiva
Essa alteração é uma mudança comportamental.
Razão da alteração
O acesso direto ou a manipulação de DefineConstants levou a usuários substituírem acidentalmente os valores. Além disso, mover a computação para um Target permite cenários de orquestração do MSBuild mais complexos exigidos por outras ferramentas.
Ação recomendada
Não inspecione
DefineConstantsvalores relacionados a TFM (por exemplo,NET9_0_OR_GREATEReNETSTANDARD2_0similares) em atributos MSBuildConditionno momento da avaliação.Certifique-se de usar as funções documentadas do MSBuild
TargetFrameworkeTargetPlatformpara verificar a compatibilidade do framework de destino. Por exemplo:<!-- 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>Continue a usar
DefineConstantsemConditionatributos para constantes que você define e controla a si mesmo. Essa alteração afeta apenas as constantes relacionadas ao TFM que o SDK define automaticamente.
APIs afetadas
Nenhum.