perfis de .NET.NET Aspire e inicialização
.NET .NET Aspire utiliza perfis de lançamento , definidos nos projetos do host do aplicativo e do serviço, para simplificar o processo de configuração de diversos aspectos da experiência de depuração e publicação de aplicativos distribuídos baseados em .NET.NET Aspire.
Noções básicas de perfil de lançamento
Ao criar um novo aplicativo .NET de um modelo, os desenvolvedores geralmente verão um diretório Properties
que contém um arquivo chamado launchSettings.json. O arquivo de configurações de inicialização contém uma lista de perfis de inicialização . Cada perfil de inicialização é uma coleção de opções relacionadas que define como você gostaria de dotnet
iniciar seu aplicativo.
O código a seguir é um exemplo de perfis de lançamento em um arquivo de launchSettings. json para um aplicativo ASP.NET Core.
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "http://localhost:5130",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "https://localhost:7106;http://localhost:5130",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
O arquivo launchSettings.json acima define dois perfis de inicialização, , http
e https
. Cada uma tem seu próprio conjunto de variáveis de ambiente, URLs de inicialização e outras opções. Ao iniciar um aplicativo .NET Core, os desenvolvedores podem escolher qual perfil de inicialização usar.
dotnet run --launch-profile https
Se nenhum perfil de inicialização for especificado, o primeiro perfil de inicialização será selecionado por padrão. É possível iniciar um aplicativo .NET Core sem um perfil de inicialização usando a opção --no-launch-profile
. Alguns campos do launchSettings.json arquivo são convertidos em variáveis de ambiente. Por exemplo, o campo applicationUrl
é convertido na variável de ambiente ASPNETCORE_URLS
que controla a qual endereço e porta ASP.NET Core se associa.
No Visual Studio é possível selecionar o perfil de inicialização ao iniciar o aplicativo, facilitando a alternância entre cenários de configuração ao depurar manualmente problemas:
Quando um aplicativo .NET é iniciado com um perfil de inicialização, uma variável de ambiente especial chamada DOTNET_LAUNCH_PROFILE
é preenchida com o nome do perfil de inicialização que foi usado ao iniciar o processo.
Iniciar perfis para .NET.NET Aspire host de aplicativo
Em .NET Aspire, o AppHost é apenas um aplicativo .NET. Como resultado, ele tem um arquivo launchSettings.json
como qualquer outro aplicativo. Aqui está um exemplo do arquivo launchSettings.json
gerado ao criar um novo projeto .NET.NET Aspire do modelo inicial (dotnet new aspire-starter
).
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:17134;http://localhost:15170",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21030",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22057"
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15170",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19240",
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20154"
}
}
}
}
Os modelos de .NET.NET Aspire têm um conjunto de perfis de inicialização muito semelhante aos de um aplicativo regular ASP.NET Core. Quando o projeto de aplicativo .NET.NET Aspire é iniciado, ele inicia um DistributedApplication e hospeda umaserver web que é usada pelo Painel de .NET Aspire para buscar informações sobre recursos que estão sendo orquestrados por .NET Aspire.
Para obter informações sobre as opções de configuração do host do aplicativo, consulte .NET.NET Aspire configuração do host do aplicativo.
Relação entre perfis de inicialização de host de aplicativo e projetos de serviço
Em .NET.NET Aspire o host do aplicativo é responsável por coordenar a inicialização de vários projetos de serviço. Quando você executa o host do aplicativo por meio da linha de comando ou de Visual Studio (ou outro ambiente de desenvolvimento), um determinado perfil de inicialização é selecionado para o aplicativo. Por sua vez, o host do aplicativo tentará encontrar um perfil de inicialização correspondente nos projetos de serviço que está iniciando e usará essas opções para controlar o ambiente e a configuração de rede padrão para o projeto de serviço.
Quando o host do aplicativo inicia um projeto de serviço, ele não simplesmente inicia o projeto de serviço usando a opção --launch-profile
. Portanto, não haverá variável de ambiente DOTNET_LAUNCH_PROFILE
definida para projetos de serviço. Isso ocorre porque .NET.NET Aspire modifica a variável de ambiente ASPNETCORE_URLS
(derivada do campo applicationUrl
no perfil de inicialização) para usar uma porta diferente. Por padrão, .NET Aspire insere um proxy reverso na frente do aplicativo ASP.NET Core para permitir várias instâncias do aplicativo usando o método WithReplicas.
Outras configurações, como opções do campo environmentVariables
, são passadas para o aplicativo sem modificação.
Controlar a seleção de perfil de inicialização
Idealmente, é possível alinhar os nomes de perfil de inicialização entre o host do aplicativo e os projetos de serviço para facilitar a alternância entre as opções de configuração em todos os projetos coordenados pelo host do aplicativo de uma só vez. No entanto, pode ser desejável controlar o perfil de inicialização que um projeto específico usa. O método de extensão AddProject fornece um mecanismo para fazer isso.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>(
"inventoryservice",
launchProfileName: "mylaunchprofile");
O código anterior mostra que o recurso inventoryservice
(um .NET projeto) é iniciado usando as opções do perfil de inicialização do mylaunchprofile
. A lógica de precedência do perfil de inicialização é a seguinte:
- Use o perfil de inicialização especificado pelo argumento
launchProfileName
, se especificado. - Use o perfil de inicialização com o mesmo nome do AppHost (determinado lendo a variável de ambiente
DOTNET_LAUNCH_PROFILE
). - Use o perfil de inicialização padrão (primeiro) em launchSettings.json.
- Não use um perfil de inicialização.
Para forçar um projeto de serviço a ser iniciado sem um perfil de inicialização, o argumento launchProfileName
no método AddProject pode ser definido como nulo.
Lançar perfis e pontos de extremidade
Ao adicionar um projeto ASP.NET Core ao host do aplicativo, .NET Aspire analisará o arquivo launchSettings.json, que seleciona o perfil de inicialização apropriado e gerará automaticamente os pontos de extremidade no modelo de aplicativo com base na(s) URL(s) presente(s) no campo applicationUrl
. Para modificar os pontos de extremidade que são injetados automaticamente no método de extensão WithEndpoint.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>("inventoryservice")
.WithEndpoint("https", endpoint => endpoint.IsProxied = false);
O código anterior mostra como desabilitar o proxy reverso que .NET Aspire implanta na frente para o aplicativo .NET Core e, em vez disso, permite que o aplicativo .NET Core responda diretamente em solicitações por HTTP(S). Para obter mais informações sobre as opções de rede dentro de .NET.NET Aspire, consulte .NET.NET Aspire visão geral de rede de loop interno.