.NET .NET Aspire e profili di avvio
.NET .NET Aspire usa i profili di avvio definiti nei progetti host e di servizio dell'app per semplificare il processo di configurazione di più aspetti dell'esperienza di debug e pubblicazione per le applicazioni distribuite basate su .NET.NET Aspire.
Nozioni di base sul profilo di lancio
Quando si crea una nuova applicazione .NET da uno sviluppatore di modelli, spesso viene visualizzata una directory Properties
che contiene un file denominato launchSettings.json. Il file delle impostazioni di avvio contiene un elenco di profili di avvio . Ogni profilo di avvio è una raccolta di opzioni correlate che definisce come vuoi avviare l'applicazione con dotnet
.
Il codice seguente è un esempio di profili di avvio in un file di launchSettings.json per un'applicazione 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"
}
}
}
}
Il file launchSettings.json precedente definisce due profili di avvio , http
e https
. Ognuno ha un proprio set di variabili di ambiente, URL di avvio e altre opzioni. Quando si avvia un'applicazione .NET Core gli sviluppatori possono scegliere il profilo di avvio da usare.
dotnet run --launch-profile https
Se non viene specificato alcun profilo di avvio, per impostazione predefinita viene selezionato il primo profilo di avvio. È possibile avviare un'applicazione .NET Core senza un profilo di avvio usando l'opzione --no-launch-profile
. Alcuni campi del file launchSettings.json vengono convertiti in variabili di ambiente. Ad esempio, il campo applicationUrl
viene convertito nella variabile di ambiente ASPNETCORE_URLS
che controlla l'indirizzo e la porta a cui ASP.NET Core viene associato.
In Visual Studio è possibile selezionare il profilo di avvio quando si avvia l'applicazione semplificando il passaggio da uno scenario di configurazione all'altro durante il debug manuale dei problemi:
Quando un'applicazione .NET viene avviata con un profilo di avvio una variabile di ambiente speciale denominata DOTNET_LAUNCH_PROFILE
viene popolata con il nome del profilo di avvio usato durante l'avvio del processo.
Avvia profili per l'host dell'app .NET.NET Aspire
In .NET Aspire, AppHost è solo un'applicazione .NET. Di conseguenza, ha un file launchSettings.json
proprio come qualsiasi altra applicazione. Di seguito è riportato un esempio del file launchSettings.json
generato durante la creazione di un nuovo progetto di .NET.NET Aspire dal modello di avvio (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"
}
}
}
}
I modelli di .NET.NET Aspire hanno un set di profili di avvio molto simile a quelli di una normale applicazione ASP.NET Core. Quando il progetto dell'app .NET.NET Aspire viene lanciato, viene avviato un DistributedApplication e ospitato un server web che è utilizzato dal dashboard .NET Aspire per recuperare informazioni sulle risorse che vengono orchestrate da .NET Aspire.
Per informazioni sulle opzioni di configurazione dell'host dell'app, vedere .NET.NET Aspire configurazione dell'host dell'app.
Relazione tra i profili di avvio dell'app host e i progetti di servizio
In .NET.NET Aspire l'host dell'app è responsabile del coordinamento del lancio di più progetti di servizio. Quando si esegue l'host dell'applicazione tramite la riga di comando o da Visual Studio (o un altro ambiente di sviluppo), viene selezionato un profilo di avvio per l'host dell'applicazione. A sua volta, l'host dell'app tenterà di trovare un profilo di avvio corrispondente nei progetti di servizio che sta avviando e userà tali opzioni per controllare l'ambiente e la configurazione di rete predefinita per il progetto di servizio.
Quando l'host dell'app avvia un progetto di servizio, non avvia semplicemente il progetto di servizio usando l'opzione --launch-profile
. Di conseguenza, la variabile di ambiente DOTNET_LAUNCH_PROFILE
non sarà impostata per i progetti di servizio. Ciò è dovuto al fatto che .NET.NET Aspire modifica la variabile di ambiente ASPNETCORE_URLS
(derivata dal campo applicationUrl
nel profilo di avvio) per usare una porta diversa. Per impostazione predefinita, .NET Aspire inserisce un proxy inverso davanti all'applicazione ASP.NET Core, consentendo così l'utilizzo di più istanze dell'applicazione mediante il metodo WithReplicas.
Altre impostazioni, ad esempio le opzioni del campo environmentVariables
, vengono passate all'applicazione senza modifiche.
Controllare la selezione del profilo di avvio
Idealmente, è possibile allineare i nomi dei profili di avvio tra l'host dell'app e i progetti di servizio per semplificare il passaggio tra le opzioni di configurazione in tutti i progetti coordinati dall'host dell'app contemporaneamente. Tuttavia, potrebbe essere preferibile controllare il profilo di avvio usato da un progetto specifico. Il metodo di estensione AddProject fornisce un meccanismo per eseguire questa operazione.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>(
"inventoryservice",
launchProfileName: "mylaunchprofile");
Il codice precedente mostra che la risorsa inventoryservice
(un progetto di .NET) viene avviata usando le opzioni del profilo di avvio mylaunchprofile
. La logica di precedenza del profilo di avvio è la seguente:
- Usare il profilo di avvio specificato dall'argomento
launchProfileName
, se presente. - Usare il profilo di avvio con lo stesso nome dell'AppHost (determinato attraverso la lettura della variabile di ambiente
DOTNET_LAUNCH_PROFILE
). - Usare il profilo di avvio predefinito (primo) in launchSettings.json.
- Non usare un profilo di avvio.
Per forzare l'avvio di un progetto di servizio senza un profilo di avvio, è possibile impostare l'argomento launchProfileName
nel metodo AddProject su Null.
Lanciare profili ed endpoint
Quando si aggiunge un progetto di ASP.NET Core all'host dell'app, .NET Aspire analizzerà il file launchSettings.json selezionando il profilo di avvio appropriato e genera automaticamente gli endpoint nel modello di applicazione in base agli URL presenti nel campo applicationUrl
. Per modificare gli endpoint inseriti automaticamente nel metodo di estensione WithEndpoint.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>("inventoryservice")
.WithEndpoint("https", endpoint => endpoint.IsProxied = false);
Il codice precedente illustra come disabilitare il proxy inverso che .NET Aspire distribuisce in primo piano per l'applicazione .NET Core e consente invece all'applicazione .NET Core di rispondere direttamente alle richieste tramite HTTP(S). Per ulteriori informazioni sulle opzioni di rete all'interno di .NET.NET Aspire, consultare la panoramica della rete dei loop interni di .NET.NET Aspire.