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.
O .NET Core 2.2 inclui aprimoramentos na implantação de aplicativos, manipulação de eventos para serviços de runtime, autenticação para bancos de dados SQL do Azure, desempenho do compilador JIT e injeção de código antes da execução do Main método.
Novo modo de implantação
A partir do .NET Core 2.2, você pode implantar executáveis dependentes da estrutura, que são arquivos.exe em vez de arquivos.dll . Funcionalmente semelhante às implantações dependentes da estrutura, os executáveis dependentes da estrutura (FDE) ainda dependem da presença de uma versão compartilhada em todo o sistema do .NET Core para execução. Seu aplicativo contém apenas seu código e quaisquer dependências de terceiros. Ao contrário das implantações dependentes da estrutura, os FDEs são específicos da plataforma.
Esse novo modo de implantação tem a vantagem distinta de criar um executável em vez de uma biblioteca, o que significa que você pode executar seu aplicativo diretamente sem invocar dotnet primeiro.
Núcleo
Manipulando eventos em serviços de runtime
Geralmente, você pode querer monitorar o uso de serviços de runtime do aplicativo, como o GC, o JIT e o ThreadPool, para entender como eles afetam seu aplicativo. Em sistemas Windows, isso geralmente é feito monitorando os eventos ETW do processo atual. Embora isso continue funcionando bem, nem sempre é possível usar o ETW se você estiver executando em um ambiente de baixo privilégio ou no Linux ou macOS.
A partir do .NET Core 2.2, os eventos CoreCLR agora podem ser consumidos usando a System.Diagnostics.Tracing.EventListener classe. Esses eventos descrevem o comportamento de serviços de runtime como GC, JIT, ThreadPool e interoperabilidade. Esses são os mesmos eventos são expostos como parte do provedor ETW CoreCLR. Isso permite que os aplicativos consumam esses eventos ou usem um mecanismo de transporte para enviá-los a um serviço de agregação de telemetria. Você pode ver como assinar eventos no seguinte exemplo de código:
internal sealed class SimpleEventListener : EventListener
{
// Called whenever an EventSource is created.
protected override void OnEventSourceCreated(EventSource eventSource)
{
// Watch for the .NET runtime EventSource and enable all of its events.
if (eventSource.Name.Equals("Microsoft-Windows-DotNETRuntime"))
{
EnableEvents(eventSource, EventLevel.Verbose, (EventKeywords)(-1));
}
}
// Called whenever an event is written.
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
// Write the contents of the event to the console.
Console.WriteLine($"ThreadID = {eventData.OSThreadId} ID = {eventData.EventId} Name = {eventData.EventName}");
for (int i = 0; i < eventData.Payload.Count; i++)
{
string payloadString = eventData.Payload[i]?.ToString() ?? string.Empty;
Console.WriteLine($"\tName = \"{eventData.PayloadNames[i]}\" Value = \"{payloadString}\"");
}
Console.WriteLine("\n");
}
}
Além disso, o .NET Core 2.2 adiciona as seguintes duas propriedades à classe EventWrittenEventArgs para fornecer informações adicionais sobre eventos ETW:
Dados
Autenticação do AAD para bancos de dados SQL do Azure com a propriedade SqlConnection.AccessToken
A partir do .NET Core 2.2, um token de acesso emitido pelo Azure Active Directory pode ser usado para autenticar em um banco de dados SQL do Azure. Para dar suporte a tokens de acesso, a AccessToken propriedade foi adicionada à SqlConnection classe. Para aproveitar a autenticação do AAD, baixe a versão 4.6 do pacote NuGet System.Data.SqlClient. Para usar o recurso, você pode obter o valor do token de acesso usando a Biblioteca de Autenticação do Active Directory para .NET contida no Microsoft.IdentityModel.Clients.ActiveDirectory pacote NuGet.
Melhorias do compilador JIT
A compilação em camadas continua sendo um recurso de aceitação
No .NET Core 2.1, o compilador JIT implementou uma nova tecnologia de compilador, compilação em camadas, como um recurso de aceitação. A meta da compilação em camadas é melhorar o desempenho. Uma das tarefas importantes executadas pelo compilador JIT é otimizar a execução de código. ** No entanto, para caminhos de código pouco usados, o compilador pode gastar mais tempo otimizando o código do que o tempo de execução gasta executando código não otimizado. A compilação em camadas apresenta dois estágios na compilação JIT:
- Uma primeira camada, que gera o código o mais rápido possível.
- Uma segunda camada, que gera código otimizado para os métodos executados com frequência. A segunda camada de compilação é executada em paralelo para melhorar o desempenho.
Para obter informações sobre a melhoria de desempenho que pode resultar da compilação em camadas, consulte Anúncio do .NET Core 2.2 Versão Prévia 2.
Para obter informações sobre como aceitar a compilação em camadas, consulte as melhorias do compilador Jit no What's new no .NET Core 2.1.
Tempo de execução
Injetando código antes de executar o método Main
A partir do .NET Core 2.2, você pode usar um gancho de inicialização para injetar código antes de executar o método Main de um aplicativo. Os ganchos de inicialização possibilitam que um host personalize o comportamento dos aplicativos depois que eles tiverem sido implantados sem a necessidade de recompilar ou alterar o aplicativo.
Esperamos que os provedores de hospedagem definam a configuração e a política personalizada, incluindo configurações que potencialmente influenciam o comportamento de carga do ponto de entrada principal, como o comportamento de System.Runtime.Loader.AssemblyLoadContext. O gancho pode ser usado para configurar a injeção de rastreamento ou de telemetria, para configurar os retornos de chamada para tratamento ou para definir outro comportamento dependente do ambiente. O gancho é separado do ponto de entrada, para que o código do usuário não precise ser modificado.
Consulte o gancho de inicialização do host para obter mais informações.