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.
Para reduzir o tamanho do aplicativo, simplificar as dependências do pacote e simplificar a manutenção, o .NET 11 inclui nove bibliotecas Microsoft.Extensions.* na estrutura compartilhada base. Projetos que referenciam explicitamente esses pacotes recebem aviso de build NU1510. Você pode resolver o aviso removendo o PackageReference. Se você depender de uma versão mais antiga desses pacotes, a atualização para a versão .NET 11 poderá expor alterações significativas introduzidas entre versões mais antigas e .NET 11.
Versão introduzida
.NET 11 Versão Prévia 4
Comportamento anterior
Anteriormente, as seguintes bibliotecas Microsoft.Extensions.* não eram parte da estrutura compartilhada .NET. (Você obtém o framework compartilhado usando Sdk="Microsoft.NET.Sdk", ou, de modo semelhante, referenciando qualquer um dos outros SDKs do .NET.) Os projetos que precisavam deles exigiam entradas explícitas PackageReference, e o processo de compilação copiava os conjuntos para a pasta de saída:
- Microsoft.Extensions.Caching.Abstractions
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft. Extensions.DependencyInjection.Abstractions
- Microsoft.Extensions.Diagnostics.Abstractions
- Microsoft. Extensions.FileProviders.Abstractions
- Microsoft.Extensions.Hosting.Abstractions
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Options
- Microsoft. Extensions.Primitives
Novo comportamento
A partir do .NET 11, essas nove bibliotecas fazem parte da estrutura compartilhada base .NET:
- Você não precisa de uma
PackageReferencepara essas bibliotecas quando tem como destinonet11.0ou versão posterior. - Se você referenciar esses pacotes explicitamente, receberá um aviso de build NU1510.
- Esses assemblies não são mais copiados para a pasta de saída.
- Em casos raros, as APIs adicionais no conjunto de carga padrão podem causar conflitos de nome ou tipo. Para resolver um conflito, adicione diretivas mais explícitas
using, use um alias ou use um nome de tipo totalmente qualificado.
Tipo de mudança disruptiva
Essa alteração é uma mudança comportamental.
Motivo da alteração
Incluir essas bibliotecas comumente usadas na estrutura compartilhada reduz o tamanho do aplicativo, simplifica as dependências do pacote e simplifica a manutenção.
Ação recomendada
Remova o PackageReference de qualquer pacote afetado:
Para projetos destinados apenas a net11.0 ou versões posteriores, remova PackageReference por completo:
<!-- Remove entries like these from your .csproj when targeting net11.0 only: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." />
<PackageReference Include="Microsoft.Extensions.Options" Version="..." />
Seu código continua funcionando sem modificação– as APIs agora fazem parte do runtime.
Para projetos com vários destinos (por exemplo, <TargetFrameworks>net10.0;net11.0</TargetFrameworks>), NU1510 não é gerado porque o pacote ainda é necessário para o TFM mais antigo. Nenhuma ação é necessária— o NuGet seleciona o assembly apropriado para cada estrutura de destino automaticamente. Se você quiser ser explícito, poderá incluir condicionalmente a referência:
<!-- Keep the reference only for TFMs that don't include it in the shared framework: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." Condition="'$(TargetFramework)' != 'net11.0'" />
Resolver conflitos de nome durante a compilação (raro):
Se você encontrar um erro de compilação porque um nome em seu código entra em conflito com uma das APIs recém-incluídas, use uma destas abordagens:
- Adicione uma diretiva mais específica
using. - Use um alias
using. - Use um nome de tipo totalmente qualificado.
Se você depender de uma versão mais antiga desses pacotes:
Para evitar falhas em tempo de execução, como MissingMethodException ou TypeLoadException, recompile todas as bibliotecas ou binários dependentes com base nos assemblies de referência do .NET 11. Se você usar net11.0 como destino, remova o PackageReference e recompile. Se você tiver como destino TFMs anteriores ou múltiplos destinos, atualize as referências aos pacotes dos destinos que não sejam net11.0 para a versão atual e depois recompile.
As seguintes alterações significativas de versões anteriores podem surgir ao atualizar para as versões .NET 11 desses pacotes:
Microsoft. Extensions.DependencyInjection.Abstractions
- ActivatorUtilities.CreateInstance se comporta de forma consistente
- ActivatorUtilities.CreateInstance requer um provedor não nulo
- Propriedade FromKeyedServicesAttribute.Key pode ser nula
- Serviço sem chave usado quando a chave não for encontrada
- GetKeyedService e GetKeyedServices usando AnyKey
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- Exceções não tratadas de um BackgroundService
- BackgroundService executa todo ExecuteAsync como uma tarefa
- IHost.RunAsync e IHost.StopAsync são lançados quando um BackgroundService falha
APIs afetadas
Nenhum.