webentwicklung-frage-antwort-db.com.de

So legen Sie aspnetcore_environment in der Veröffentlichungsdatei fest

Ich habe eine ASP.NET Core-Anwendung (Web Api). In der Dokumentation wurde Arbeiten mit mehreren Umgebungen erläutert, jedoch wurde nicht erläutert, wie aspnetcore_environment beim Veröffentlichen der Website festgelegt wird. 

Lassen Sie uns sagen, wenn ich 3 Umgebungen Development, Staging und Production habe 

  1. In der klassischen ASP.NET-Webanwendung wurden drei Build-Konfigurationen erstellt. Development, Staging und Production (wie in der Abbildung unten gezeigt). und dann 3 .pubxml-Dateien, eine für jede Konfiguration. Muss ich den gleichen Ansatz auch für ASP.NET Core-Anwendung verwenden?

  2. Wie lege ich aspnetcore_environment in der .pubxml-Datei fest? 

  3. Wenn der in Frage 1 angegebene Ansatz veraltet ist, wie lautet dann der alternative Ansatz? (Ich benutze Jenkins für CI)

enter image description here

Update 1

Ich verstehe, dass ich ASPNETCORE_ENVIRONMENT einstellen muss, aber ich kann nicht verstehen, wo wir das einstellen? Während der Entwicklung kann ich dies in launchSettings.json im Profil festlegen. Die Frage war jedoch, wie wir dies beim Publizieren als Inszenierung oder Produktion festlegen. setzen wir die Umgebungsvariable auf dem Zielserver selbst? 

enter image description here

Update 2
Ich habe den Artikel hier gefunden, in dem die verschiedenen Möglichkeiten zum Einstellen der Umgebungsvariablen erläutert werden. Dies hat meine Frage teilweise beantwortet. Beim Veröffentlichen der Anwendung berücksichtigt der Veröffentlichungsprozess jedoch nicht die Umgebungsvariable, während appsettings.{env.EnvironmentName}.json veröffentlicht wird.
Ich habe für diese Frage ein separates Post erstellt

18
LP13

Beim Hosten der Anwendung unter IIS können Sie die Umgebungsvariable in web.config festlegen.

https://docs.Microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module

Um es beim Publizieren zu generieren, fügen Sie eine web.config zum Stamm Ihres Projekts hinzu. "Dotnet publish" verwendet diese Datei als Grundlage für die im Veröffentlichungsordner generierte. Dann können Sie den Wert in Ihrem Implementierungssystem ändern.

<?xml version="1.0" encoding="utf-8" ?>
<!-- Used to overwrite settings web.config generated by "dotnet publish", Only used when hosting under IIS -->
<configuration>
 <system.webServer>
   <aspNetCore stdoutLogEnabled="true">
     <environmentVariables>
       <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
     </environmentVariables>
   </aspNetCore>
 </system.webServer>  
</configuration>
14

Sie können das gewünschte ASPNETCORE_ENVIRONMENT im Argument dotnet publish als Argument übergeben, indem Sie Folgendes verwenden: 

/p:EnvironmentName=Staging

z.B. dotnet publish /p:Configuration=Release /p:EnvironmentName=Staging

Dadurch wird die Datei web.config mit der für Ihr Projekt angegebenen korrekten Umgebung generiert:

    <environmentVariables>
      <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
    </environmentVariables>
9
Sheldon Nunes

Um zwei oder mehr Profile einzurichten, müssen Sie ein zusätzliches Profil erstellen, wie in einem verknüpften Artikel erwähnt , und Ihr launchSettings.json enthält ein Array:

"profiles": {
  "IIS Express": {
    "commandName": "IISExpress",
    "launchBrowser": true,
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
  "IIS Express (Staging)": {
    "commandName": "IISExpress",
    "launchBrowser": true,
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Staging"
    }
  }
}

Um die Umgebungsvariable lesen zu können, müssen Sie während des Startvorgangs angebenund die zusätzliche Methode AddEnvironmentVariables aufrufen, damit die Variablen Folgendes ausführen:

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            // general properties
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            // specify the environment-based properties
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            // do not forget to add environment variables to your config!
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }
}
1
VMAtm

Ich hatte die gleiche Anforderung und kam zu folgenden Lösungen. Dies funktioniert gut mit automatisierten Bereitstellungen und erfordert weniger Konfigurationsänderungen.

1. Ändern der Projektdatei (.CsProj) -Datei 

MSBuild unterstützt die EnvironmentName -Eigenschaft, die dabei helfen kann, die richtige Umgebungsvariable für die Umgebung festzulegen, die Sie bereitstellen möchten. Der Umgebungsname würde in der web.config während der Veröffentlichungsphase hinzugefügt.

Öffnen Sie einfach die Projektdatei (* .csProj) und fügen Sie das folgende XML hinzu.

    <!-- Custom Property Group added to add the Environment name during publish
  The EnvironmentName property is used during the publish for the Environment variable in web.config
  -->
  <PropertyGroup Condition=" '$(Configuration)' == '' Or '$(Configuration)' == 'Debug'">
    <EnvironmentName>Development</EnvironmentName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' != '' AND '$(Configuration)' != 'Debug' ">
    <EnvironmentName>'$(Configuration)'</EnvironmentName>
  </PropertyGroup>

Der obige Code würde den Umgebungsnamen als Development für leere oder Debug-Konfiguration hinzufügen. Für jede andere Konfiguration wird der Umgebungsname aus der ausgewählten Konfiguration ausgewählt. Dadurch wird die ASPNETCORE_ENVIRONMENT-Umgebung mit der gewünschten Konfiguration hinzugefügt. Sie können die Logik für den Umgebungsnamen nach Bedarf ändern, indem Sie die CsProj-Datei aktualisieren. Weitere Details hier

2. Hinzufügen der EnvironmentName-Eigenschaft in den Veröffentlichungsprofilen.

Wir können die <EnvironmentName>-Eigenschaft auch im Veröffentlichungsprofil hinzufügen. Öffnen Sie die Veröffentlichungsprofildatei, die sich unter Properties/PublishProfiles/{profilename.pubxml} befindet. Dadurch wird der Umgebungsname in web.config festgelegt, wenn das Projekt veröffentlicht wird. Mehr Details hier

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

enter image description here

Wie in der Abbildung oben gezeigt, kann für jede Konfiguration eine Umgebung hinzugefügt werden, und der Name der EnvironmentName-Eigenschaft kann in jeder * .pubxml-Datei geändert werden.

3. Befehlszeilenoptionen mit dotnet publish

Darüber hinaus können wir die Eigenschaft EnvironmentName als Befehlszeilenoption an den Befehl dotnet publish übergeben. Der folgende Befehl würde die Umgebungsvariable als Development in die Datei web.config aufnehmen.

dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development

1
Abhinav Galodha

Einfache Einstellung in Visual Studio IDE.

Projekt> Eigenschaften> Debuggen> Umgebungsvariablen

 enter image description here

Bitte verwenden Sie keine Umgebungsvariablen auf Maschinenebene stattdessen. Für die Anwendung besteht die Möglichkeit, dass eine andere Anwendung Die Änderung kann sich jedoch auch auf andere Anwendungen auswirken.

0

Ich denke, Sie können es nicht im Veröffentlichungsprofil tun. Sie müssen eine Umgebungsvariable festlegen, z. ASPNETCORE_ENVIRONMENT = Staging . Ich hatte eine ähnliche Aufgabe mit einer Aspnet-Core-Web-App auf Azure. Ich wollte Entwicklung, Inszenierung und Produktion. So wie ich es gemacht habe, war es genau mit der env-Variable.

0
regnauld