.NET .NET Aspire et lancer des profils
.NET .NET Aspire utilise profils de lancement définis dans les projets d’hôte d’application et de service afin de simplifier le processus de configuration de plusieurs aspects de l’expérience de débogage et de publication pour les applications distribuées basées sur .NET.NET Aspire.
Principes de base du profil de lancement
Lors de la création d’une application .NET à partir d’un modèle, les développeurs voient souvent un répertoire Properties
qui contient un fichier nommé launchSettings.json. Le fichier de paramètres de lancement contient une liste de profils de lancement . Chaque profil de lancement est une collection d’options associées qui définit la façon dont vous souhaitez dotnet
démarrer votre application.
Le code ci-dessous est un exemple de profils de lancement dans un fichier launchSettings.json pour une application 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"
}
}
}
}
Le fichier launchSettings.json ci-dessus définit deux profils de lancement : , http
et https
. Chacun a son propre ensemble de variables d’environnement, lance des URL et d’autres options. Lors du lancement d'une application Core .NET, les développeurs peuvent choisir le profil de lancement à utiliser.
dotnet run --launch-profile https
Si aucun profil de lancement n’est spécifié, le premier profil de lancement est sélectionné par défaut. Il est possible de lancer une application .NET Core sans profil de lancement à l’aide de l’option --no-launch-profile
. Certains champs de la launchSettings.json fichier sont traduits en variables d’environnement. Par exemple, le champ applicationUrl
est converti en variable d’environnement ASPNETCORE_URLS
qui contrôle l’adresse et le port auxquels ASP.NET Core se lie.
Dans Visual Studio il est possible de sélectionner le profil de lancement lors du lancement de l’application, ce qui facilite le basculement entre les scénarios de configuration lors du débogage manuel des problèmes :
Lorsqu’une application .NET est lancée avec un profil de lancement, une variable d’environnement spéciale appelée DOTNET_LAUNCH_PROFILE
est remplie avec le nom du profil de lancement utilisé lors du lancement du processus.
Lancer des profils pour l’hôte d’application .NET.NET Aspire
Dans .NET Aspire, AppHost n’est qu’une application .NET. Par conséquent, il a un fichier launchSettings.json
comme n’importe quelle autre application. Voici un exemple du fichier launchSettings.json
généré lors de la création d’un projet .NET.NET Aspire à partir du modèle de démarrage (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"
}
}
}
}
Les modèles .NET.NET Aspire ont un ensemble très similaire de profils de lancement à une application ASP.NET Core régulière. Lorsque le projet d’application .NET.NET Aspire démarre, il démarre une DistributedApplication et héberge unserver web utilisé par le tableau de bord .NET Aspire pour extraire des informations sur les ressources orchestrées par .NET Aspire.
Pour plus d’informations sur les options de configuration de l’hôte d’application, consultez .NET.NET Aspire configuration de l’hôte d’application.
Relation entre les profils de lancement de l’hôte d’application et les projets de service
Dans .NET.NET Aspire l’hôte d’application est chargé de coordonner le lancement de plusieurs projets de service. Lorsque vous exécutez l’hôte de l’application via la ligne de commande ou à partir de Visual Studio (ou d’un autre environnement de développement), un profil de lancement est sélectionné pour l’hôte de l’application. À son tour, l’hôte de l’application tente de trouver un profil de lancement correspondant dans les projets de service qu’il lance et utilise ces options pour contrôler l’environnement et la configuration réseau par défaut pour le projet de service.
Lorsque l’hôte d’application lance un projet de service, il ne lance pas simplement le projet de service à l’aide de l’option --launch-profile
. Par conséquent, aucune variable d’environnement DOTNET_LAUNCH_PROFILE
n’est définie pour les projets de service. Cela est dû au fait que .NET.NET Aspire modifie la variable d’environnement ASPNETCORE_URLS
(dérivée du champ applicationUrl
dans le profil de lancement) pour utiliser un autre port. Par défaut, .NET Aspire insère un proxy inverse devant l’application ASP.NET Core pour autoriser plusieurs instances de l’application à l’aide de la méthode WithReplicas.
D’autres paramètres, tels que les options du champ environmentVariables
, sont transmis à l’application sans modification.
Contrôler la sélection du profil de lancement
Dans l’idéal, il est possible d’aligner les noms de profil de lancement entre l’hôte de l’application et les projets de service pour faciliter le basculement entre les options de configuration sur tous les projets coordonnés par l’hôte d’application à la fois. Toutefois, il peut être souhaitable de contrôler le profil de lancement qu’un projet spécifique utilise. La méthode d’extension AddProject fournit un mécanisme pour ce faire.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>(
"inventoryservice",
launchProfileName: "mylaunchprofile");
Le code précédent montre que la ressource inventoryservice
(un projet .NET) est lancée à l’aide des options du profil de lancement mylaunchprofile
. La logique de précédence du profil de lancement est la suivante :
- Utilisez le profil de lancement spécifié par
launchProfileName
argument s’il est spécifié. - Utilisez le profil de lancement portant le même nom que l’AppHost (déterminé par la lecture de la variable d’environnement
DOTNET_LAUNCH_PROFILE
). - Utilisez le profil de lancement par défaut (premier) dans launchSettings.json.
- N’utilisez pas de profil de lancement.
Pour forcer le lancement d’un projet de service sans profil de lancement, l’argument launchProfileName
sur la méthode AddProject peut être défini sur Null.
Lancer des profils et des endpoints
Lors de l’ajout d’un projet ASP.NET Core à l’hôte de l’application, .NET Aspire analyse les paramètres de lancement . Fichierjson sélectionnant le profil de lancement approprié et génère automatiquement des points de terminaison dans le modèle d’application en fonction des URL présentes dans le champ applicationUrl
. Pour modifier les points de terminaison qui sont automatiquement injectés dans la méthode d’extension WithEndpoint.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>("inventoryservice")
.WithEndpoint("https", endpoint => endpoint.IsProxied = false);
Le code précédent montre comment désactiver le proxy inverse que .NET Aspire déploie devant l’application .NET Core et permet plutôt à l’application .NET Core de répondre directement sur les requêtes via HTTP(S). Pour plus d’informations sur les options de mise en réseau dans .NET.NET Aspire, consultez .NET.NET Aspire vue d’ensemble de la mise en réseau des boucles internes.