Freigeben über


.NET .NET Aspire und Startprofile

.NET .NET Aspire nutzt Startprofile, die sowohl im App-Host- als auch im Dienstprojekt definiert werden, um den Prozess der Konfiguration mehrerer Aspekte des Debuggens und Veröffentlichens für auf .NET.NET Aspirebasierende verteilte Anwendungen zu vereinfachen.

Grundlegendes zum Start von Profilen

Beim Erstellen einer neuen .NET-Anwendung aus einer Vorlage wird häufig ein Properties-Verzeichnis angezeigt, das eine Datei mit dem Namen launchSettings enthält.json. Die Starteinstellungsdatei enthält eine Liste der Startprofile. Jedes Startprofil ist eine Sammlung verwandter Optionen, die festlegen, wie Sie dotnet Ihre Anwendung starten möchten.

Der folgende Code ist ein Beispiel für Startprofile in einem launchSettings.json Datei für eine ASP.NET Core Anwendung.

{
  "$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"
      }
    }
  }
}

Die oben genannte launchSettings.json Datei definiert zwei Startprofile, http, und https. Jeder verfügt über einen eigenen Satz von Umgebungsvariablen, Start-URLs und andere Optionen. Beim Starten einer .NET Core-Anwendungen können Entwickler auswählen, welches Startprofil verwendet werden soll.

dotnet run --launch-profile https

Wenn kein Startprofil angegeben ist, wird standardmäßig das erste Startprofil ausgewählt. Es ist möglich, eine .NET Core-Anwendung ohne Startprofil mithilfe der option --no-launch-profile zu starten. Einige Felder aus dem launchSettings.json Datei werden in Umgebungsvariablen übersetzt. Beispielsweise wird das feld applicationUrl in die ASPNETCORE_URLS Umgebungsvariable konvertiert, die steuert, an welche Adresse und welcher Port ASP.NET Core gebunden wird.

In Visual Studio ist es möglich, das Startprofil beim Starten der Anwendung auszuwählen, wodurch der Wechsel zwischen Konfigurationsszenarien beim manuellen Debuggen von Problemen erleichtert wird:

Screenshot der Standardsymbolleiste in Visual Studio mit hervorgehobener Startprofil-Auswahl.

Wenn eine .NET Anwendung mit einem Startprofil gestartet wird, wird eine spezielle Umgebungsvariable namens DOTNET_LAUNCH_PROFILE mit dem Namen des Startprofils aufgefüllt, das beim Starten des Prozesses verwendet wurde.

Starten von Profilen für .NET.NET Aspire App-Host

In .NET Aspireist AppHost nur eine .NET Anwendung. Daher hat sie eine launchSettings.json Datei wie jede andere Anwendung. Nachfolgend sehen Sie ein Beispiel für die launchSettings.json Datei, die beim Erstellen eines neuen .NET.NET Aspire Projekts aus der Startvorlage (dotnet new aspire-starter) generiert wird.

{
  "$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"
      }
    }
  }
}

Die .NET.NET Aspire-Vorlagen verfügen über einen sehr ähnlichen Satz von Startprofilen einer regulären ASP.NET Core Anwendung. Wenn das .NET.NET Aspire App-Projekt gestartet wird, startet es eine DistributedApplication und hostet eine Web-server, die vom .NET Aspire-Dashboard verwendet wird, um Informationen zu Ressourcen abzurufen, die von .NET Aspireorchestriert werden.

Informationen zu App-Hostkonfigurationsoptionen finden Sie unter .NET.NET Aspire App-Hostkonfiguration.

Beziehung zwischen App-Host-Startprofilen und Dienstprojekten

In .NET.NET Aspire ist der App-Host für die Koordination des Starts mehrerer Dienstprojekte verantwortlich. Wenn Sie den App-Host entweder über die Befehlszeile oder aus Visual Studio (oder einer anderen Entwicklungsumgebung) ausführen, wird ein Startprofil für den App-Host ausgewählt. Der App-Host versucht wiederum, ein passendes Startprofil in den Dienstprojekten zu finden, die gestartet werden, und diese Optionen verwenden, um die Umgebung und die Standardnetzwerkkonfiguration für das Dienstprojekt zu steuern.

Wenn der App-Host ein Dienstprojekt startet, wird das Dienstprojekt nicht einfach mithilfe der Option --launch-profile gestartet. Daher wird für Dienstprojekte keine DOTNET_LAUNCH_PROFILE Umgebungsvariable festgelegt. Dies liegt daran, dass .NET.NET Aspire die ASPNETCORE_URLS Umgebungsvariable (abgeleitet vom feld applicationUrl im Startprofil) so ändert, dass ein anderer Port verwendet wird. Standardmäßig fügt .NET Aspire einen Reverse-Proxy vor der Anwendung ASP.NET Core ein, um mithilfe der WithReplicas-Methode mehrere Instanzen der Anwendung zuzulassen.

Andere Einstellungen wie Optionen aus dem Feld environmentVariables werden ohne Änderung an die Anwendung übergeben.

Steuern der Auswahl des Startprofils

Im Idealfall ist es möglich, die Startprofilnamen zwischen dem App-Host und den Dienstprojekten auszurichten, um den Wechsel zwischen Konfigurationsoptionen für alle vom App-Host koordinierten Projekte auf einmal zu vereinfachen. Es kann jedoch wünschenswert sein, das Startprofil zu steuern, das ein bestimmtes Projekt verwendet. Die AddProject Erweiterungsmethode stellt hierfür einen Mechanismus bereit.

var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>(
    "inventoryservice",
    launchProfileName: "mylaunchprofile");

Der vorherige Code zeigt, dass die inventoryservice-Ressource (ein .NET Projekt) mithilfe der Optionen aus dem mylaunchprofile Startprofil gestartet wird. Die Rangfolgelogik für das Startprofil lautet wie folgt:

  1. Verwenden Sie das Startprofil, das durch das Argument launchProfileName angegeben wird, falls es angegeben ist.
  2. Verwenden Sie das Startprofil mit demselben Namen wie AppHost (bestimmt durch Lesen der Umgebungsvariablen DOTNET_LAUNCH_PROFILE).
  3. Verwenden Sie das Standardstartprofil (erstes) in launchSettings.json.
  4. Verwenden Sie kein Startprofil.

Um zu erzwingen, dass ein Dienstprojekt ohne Startprofil gestartet wird, kann das Argument launchProfileName für die AddProject-Methode auf NULL festgelegt werden.

Starten von Profilen und Endpunkten

Beim Hinzufügen eines ASP.NET Core Projekts zum App-Host analysiert .NET Aspire die launchSettings.json Datei, wählt das entsprechende Startprofil aus und generiert automatisch Endpunkte im Anwendungsmodell basierend auf den URLs, die im applicationUrl-Feld vorhanden sind. So ändern Sie die Endpunkte, die automatisch über die WithEndpoint-Erweiterungsmethode injiziert werden.

var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>("inventoryservice")
       .WithEndpoint("https", endpoint => endpoint.IsProxied = false);

Im vorherigen Code wird gezeigt, wie der Reverseproxy, den .NET Aspire vor der .NET Core-Anwendung bereitstellt, deaktiviert wird und stattdessen die .NET Core-Anwendung ermöglicht wird, direkt auf Anforderungen über HTTP(S) zu reagieren. Weitere Informationen zu Netzwerkoptionen in .NET.NET Aspire finden Sie in der Übersicht zum "Inner Loop Networking" .NET.NET Aspire.

Siehe auch