.NET .NET Aspire e perfis de lançamento
.NET .NET Aspire usa perfis de inicialização definidos no host do aplicativo e nos projetos de serviço para simplificar o processo de configuração de vários aspetos da experiência de depuração e publicação para aplicativos distribuídos baseados em .NET.NET Aspire.
Noções básicas sobre o perfil de lançamento
Ao criar um novo aplicativo .NET a partir 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 que dotnet
iniciassem seu aplicativo.
O código abaixo é um exemplo de perfis de inicialização em um launchSettings.json arquivo 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 launchSettings.json arquivo acima define dois perfis de inicialização , http
e https
. Cada um tem seu próprio conjunto de variáveis de ambiente, URLs de inicialização e outras opções. Ao iniciar um .NET os desenvolvedores de aplicativos Core 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 traduzidos para variáveis de ambiente. Por exemplo, o campo applicationUrl
é convertido para a variável de ambiente ASPNETCORE_URLS
que controla a qual endereço e porta ASP.NET Core se liga.
Em Visual Studio, é possível selecionar o perfil de inicialização ao lançar a aplicação, o que facilita a troca entre cenários de configuração ao depurar problemas manualmente.
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 host da aplicação .NET.NET Aspire
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 de launchSettings.json
gerado ao criar um novo projeto .NET.NET Aspire a partir 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 muito semelhante de perfis de lançamento de a uma aplicação comum ASP.NET Core. Quando o app .NET.NET Aspire é lançado, ele inicia um DistributedApplication e hospeda umserver web que é usado pelo dashboard de .NET Aspire para obter informações sobre os recursos que estão a ser 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 de aplicativo.
Relação entre perfis de inicialização de host de aplicativo e projetos de serviço
No .NET.NET Aspire, o host da aplicação é responsável por coordenar o início de vários projetos de serviço. Quando você executa o host do aplicativo por meio da linha de comando ou do Visual Studio (ou outro ambiente de desenvolvimento), um perfil de inicialização é selecionado para o host do 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á nenhuma 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 do 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 lançamento utilizado por um projeto específico. 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 projeto .NET) é iniciado usando as opções do perfil de inicialização mylaunchprofile
. A lógica de precedência do perfil de lançamento é a seguinte:
- Utilize o perfil de inicialização especificado pelo argumento
launchProfileName
, se especificado. - Use o perfil de inicialização com o mesmo nome do AppHost (determinado pela leitura da 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 iniciar sem um perfil de inicialização, o argumento launchProfileName
no método AddProject pode ser definido como null.
Iniciar perfis e endpoints
Ao adicionar um projeto ASP.NET Core ao host do aplicativo, .NET Aspire analisará o launchSettings.json arquivo selecionando o perfil de inicialização apropriado e gerar automaticamente pontos de extremidade no modelo de aplicativo com base no(s) URL(s) presente(s) no campo applicationUrl
. Para modificar os pontos de extremidade que o método de extensão WithEndpoint injeta automaticamente.
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 às solicitações por HTTP(S). Para obter mais informações sobre opções de rede dentro de .NET.NET Aspire, consulte a visão geral do networking do ciclo interno em .NET.NET Aspire.