Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Para reduzir o tamanho da aplicação, simplificar dependências de pacotes e simplificar o serviço, .NET 11 inclui nove bibliotecas Microsoft.Extensions.* no framework partilhado base. Os projetos que referenciam explicitamente estes pacotes recebem o aviso de compilação NU1510. Pode resolver o aviso removendo o PackageReference. Se depender de uma versão mais antiga destes pacotes, atualizar para a versão .NET 11 pode expor alterações disruptivas introduzidas entre versões mais antigas e .NET 11.
Versão introduzida
.NET 11 Prévia 4
Comportamento anterior
Anteriormente, as seguintes bibliotecas Microsoft.Extensions.* não faziam parte do framework .NET partilhado. (Obtém-se o framework partilhado usando Sdk="Microsoft.NET.Sdk", ou referenciando de forma semelhante qualquer um dos os outros SDKs .NET.) Os projetos que precisavam delas exigiam entradas explícitas PackageReference, e o processo de compilação copiava os assemblies para a pasta de saída:
- Microsoft.Extensions.Caching.Abstractions
- Microsoft. Extensões.Configuração.Abstrações
- Microsoft.Extensions.DependencyInjection.Abstractions
- Microsoft. Extensões.Diagnósticos.Abstrações
- Microsoft. Extensions.FileProviders.Abstractions
- Microsoft.Extensions.Hosting.Abstractions
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Options
- Microsoft. Extensões.Primitivas
Novo comportamento
A partir do .NET 11, estas nove bibliotecas fazem parte do framework partilhado base .NET:
- Não precisa de
PackageReferencepara estas bibliotecas quando tem como destinonet11.0ou posterior. - Se referenciares estes pacotes explicitamente, recebes o aviso de compilação NU1510.
- Estas assemblagens deixam de ser copiadas para a pasta de saída.
- Em casos raros, as APIs adicionais no conjunto de carga padrão podem causar conflitos de nomes ou tipos. Para resolver um conflito, adicione diretivas mais explícitas
using, use um pseudónimo ou utilize um nome de tipo totalmente qualificado.
Tipo de mudança disruptiva
Esta alteração é de natureza comportamental .
Motivo da mudança
Incluir estas bibliotecas comuns no framework partilhado reduz o tamanho da aplicação, simplifica as dependências de pacotes e simplifica o serviço.
Ação recomendada
Remova o PackageReference para qualquer pacote afetado:
Para projetos que visam apenas net11.0 ou depois, remova completamente o PackageReference seguinte:
<!-- 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="..." />
O seu código continua a funcionar sem modificações — as APIs passam a fazer parte do tempo de execução.
Para projetos multidirecionados (por exemplo, <TargetFrameworks>net10.0;net11.0</TargetFrameworks>), o NU1510 não é levantado porque o pacote ainda é necessário para o TFM mais antigo. Não é necessária qualquer ação — o NuGet seleciona automaticamente a assembly apropriada para cada framework alvo. Se quiseres ser explícito, podes 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 nomes em tempo de compilação (raro):
Se encontrar um erro de compilação porque um nome no 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. - Usa um
usingpseudónimo. - Use um nome de tipo totalmente qualificado.
Se depender de uma versão mais antiga destes 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 segmentares para net11.0, remove PackageReference e recompila. Se tiver como alvo TFMs anteriores ou múltiplos destinos, atualize as referências de pacote para os destinos que não sejam net11.0 para a versão mais recente e, em seguida, volte a compilar.
As seguintes alterações em relação às versões anteriores podem surgir ao atualizar para as versões .NET 11 destes pacotes:
Microsoft.Extensions.DependencyInjection.Abstractions
- ActivatorUtilities.CreateInstance se comporta consistentemente
- ActivatorUtilities.CreateInstance requer provedor não nulo
- FromKeyedServicesAttribute.Propriedade Chave anulável
- Serviço sem chave usado quando a chave não é encontrada
- GetKeyedService e GetKeyedServices com AnyKey
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Hosting.Abstractions
- Exceções não tratadas de um BackgroundService
- BackgroundService executa todo o ExecuteAsync como uma tarefa
- IHost.RunAsync e IHost.StopAsync lançam quando um Serviço em Segundo Plano falha
APIs afetadas
Nenhum.