Delen via


.NET .NET Aspire en startprofielen

.NET .NET Aspire maakt gebruik van startprofielen gedefinieerd in zowel app-host- als serviceprojecten om het configureren van meerdere aspecten van de foutopsporings- en publicatie-ervaring voor gedistribueerde .NET.NET Aspiretoepassingen te vereenvoudigen.

Basisbeginselen van profiel starten

Wanneer ontwikkelaars een nieuwe .NET-toepassing maken van een sjabloon, zien ze vaak een Properties-directory met een bestand genaamd launchSettings.json. Het bestand met instellingen voor starten bevat een lijst met startprofielen. Elk startprofiel is een verzameling gerelateerde opties waarmee wordt gedefinieerd hoe u dotnet uw toepassing wilt starten.

De onderstaande code is een voorbeeld van startprofielen in een launchSettings.json bestand voor een ASP.NET Core toepassing.

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

De launchSettings.json bestand hierboven definieert twee startprofielen, http en https. Elk heeft een eigen set omgevingsvariabelen, start URL's en andere opties. Bij het starten van een .NET Core-toepassingsontwikkelaars kunnen kiezen welk startprofiel moet worden gebruikt.

dotnet run --launch-profile https

Als er geen startprofiel is opgegeven, wordt standaard het eerste startprofiel geselecteerd. Het is mogelijk om een .NET Core-toepassing te starten zonder een startprofiel met behulp van de optie --no-launch-profile. Sommige velden uit de launchSettings.json bestand wordt vertaald naar omgevingsvariabelen. Het veld applicationUrl wordt bijvoorbeeld geconverteerd naar de omgevingsvariabele ASPNETCORE_URLS waarmee wordt gecontroleerd aan welk adres en welke poort ASP.NET Core is gekoppeld.

In Visual Studio is het mogelijk om het startprofiel te selecteren bij het starten van de toepassing, zodat u eenvoudig kunt schakelen tussen configuratiescenario's bij het handmatig opsporen van problemen:

Schermopname van de standaardwerkbalk in Visual Studio met de startprofielkiezer gemarkeerd.

Wanneer een .NET toepassing wordt gestart met een startprofiel, wordt een speciale omgevingsvariabele met de naam DOTNET_LAUNCH_PROFILE gevuld met de naam van het startprofiel dat is gebruikt bij het starten van het proces.

Profielen starten voor .NET.NET Aspire app-host

In .NET Aspireis de AppHost slechts een .NET toepassing. Als gevolg hiervan heeft het een launchSettings.json-bestand, net als elke andere toepassing. Hier volgt een voorbeeld van het launchSettings.json bestand dat wordt gegenereerd bij het maken van een nieuw .NET.NET Aspire project op basis van de starterssjabloon (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"
      }
    }
  }
}

De .NET.NET Aspire-sjablonen hebben een zeer vergelijkbare set startprofielen voor een gewone ASP.NET Core toepassing. Wanneer het .NET.NET Aspire app-project wordt gestart, wordt er een DistributedApplication gestart en wordt een web-server gehost dat wordt gebruikt door het .NET Aspire Dashboard om informatie op te halen over resources die worden georkestreerd door .NET Aspire.

Zie .NET.NET Aspire app-hostconfiguratievoor meer informatie over configuratieopties voor de app-host.

Relatie tussen startprofielen voor app-hosts en serviceprojecten

In .NET.NET Aspire is de app-host verantwoordelijk voor het coördineren van de lancering van meerdere serviceprojecten. Wanneer u de app-host uitvoert via de opdrachtregel of vanuit Visual Studio (of een andere ontwikkelomgeving), wordt een startprofiel geselecteerd voor de app-host. Op zijn beurt probeert de app-host een overeenkomend startprofiel te vinden in de serviceprojecten die het start en gebruikt deze opties om de omgeving en de standaardnetwerkconfiguratie voor het serviceproject te beheren.

Wanneer de app-host een serviceproject start, wordt het serviceproject niet alleen gestart met behulp van de optie --launch-profile. Daarom is er geen DOTNET_LAUNCH_PROFILE omgevingsvariabele ingesteld voor serviceprojecten. Dit komt doordat .NET.NET Aspire de omgevingsvariabele ASPNETCORE_URLS wijzigt (afgeleid van het veld applicationUrl in het startprofiel) om een andere poort te gebruiken. Standaard voegt .NET Aspire een omgekeerde proxy in voor de ASP.NET Core-toepassing om meerdere exemplaren van de toepassing toe te staan met behulp van de WithReplicas methode.

Andere instellingen, zoals opties uit het environmentVariables veld, worden zonder wijziging doorgegeven aan de toepassing.

Selectie van startprofiel beheren

In het ideale stadium is het mogelijk om de namen van het startprofiel tussen de app-host en de serviceprojecten uit te lijnen, zodat u eenvoudig kunt schakelen tussen configuratieopties voor alle projecten die tegelijk door de app-host worden gecoördineerd. Het kan echter wenselijk zijn om het startprofiel te beheren dat een specifiek project gebruikt. De AddProject-extensiemethode biedt een mechanisme om dit te doen.

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

In de voorgaande code ziet u dat de inventoryservice resource (een .NET-project) wordt gestart met behulp van de opties uit het mylaunchprofile startprofiel. De logica voor prioriteit van het startprofiel is als volgt:

  1. Gebruik het startprofiel dat is opgegeven door launchProfileName argument, indien opgegeven.
  2. Gebruik het startprofiel met dezelfde naam als de AppHost (bepaald door de omgevingsvariabele DOTNET_LAUNCH_PROFILE te lezen).
  3. Gebruik het standaard (eerste) startprofiel in launchSettings.json.
  4. Gebruik geen startprofiel.

Als u wilt afdwingen dat een serviceproject wordt gestart zonder een startprofiel, kan het argument launchProfileName voor de methode AddProject worden ingesteld op null.

Profielen en eindpunten starten

Wanneer u een ASP.NET Core-project toevoegt aan de app-host, parseert .NET Aspire de launchSettings.json bestand dat het juiste startprofiel selecteert en automatisch eindpunten genereert in het toepassingsmodel op basis van de URL('s) die aanwezig zijn in het veld applicationUrl. Om de eindpunten te wijzigen die automatisch worden geïnjecteerd door de WithEndpoint-extensiemethode.

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

In de voorgaande code ziet u hoe u de omgekeerde proxy uitschakelt die .NET Aspire vóór de .NET Core-toepassing implementeert. In plaats daarvan kan de .NET Core-toepassing rechtstreeks reageren op aanvragen via HTTP(S). Voor meer informatie over netwerkopties binnen .NET.NET Aspire, zie .NET.NET Aspire inner loop networking overzicht.

Zie ook