9

Ich habe ASP.NET Core-Anwendung (Web API). Die Dokumentation hat erklärt working with multiple environments, aber es konnte nicht erklären, wie aspnetcore_environment bei der Veröffentlichung der Website festgelegt wird.Wie setze ich aspnetcore_environment in publish file?

kann also sagen, wenn ich habe 3 Umgebungen Development, Staging und Production

  1. Im klassischen ASP.NET Web Application i 3 Build-Konfigurationen erstellt hat. Development, Staging und Production (wie im Bild unten gezeigt). und dann 3 .pubxml Dateien, eine für jede Konfiguration. Muss ich den gleichen Ansatz für ASP.NET Core Anwendung auch verwenden?

  2. Wie stelle ich aspnetcore_environment in .pubxml datei ein?

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

enter image description here

Update 1

Ich verstehe, dass ich setzen ASPNETCORE_ENVIRONMENT aber ich bin nicht in der Lage zu verstehen, wo wir diesen Satz? Während der Entwicklung kann ich dies im Profil in launchSettings.json setzen, aber Frage war, wie stellen wir dies bei der Veröffentlichung auf Staging oder Produktion? setzen wir die Umgebungsvariable auf dem Zielserver selbst?

enter image description here

Update 2
fand ich Artikel here, die verschiedene Möglichkeiten der Einstellung Umgebungsvariablen erklärt. Dies beantwortete teilweise meine Frage. Allerdings, wenn ich die Anwendung veröffentlichen, wird der Prozess nicht veröffentlichen die Umgebungsvariable ehren, während appsettings.{env.EnvironmentName}.json
Veröffentlichung habe ich getrennt erstellt post für diese Frage

+2

Mögliches Duplikat von [Hosting-Umgebung für Self-Hosting übergeben] (http://stackoverflow.com/questions/39203820/pass-hosting-environment-for-self-hosting). Die Frage wurde dort bereits beantwortet. Verwenden Sie einfach commandline/powershell/bash/azureportal, um eine Umgebungsvariable – Tseng

Antwort

0

Ich glaube, Sie nicht, dass es in dem Profil veröffentlichen tun können. Sie müssen die Umgebungsvariable z. ASPNETCORE_ENVIRONMENT = Staging. Ich musste eine ähnliche Sache mit einer Aspnet-Core-Web-App auf Azure tun. Ich wollte Dev, Inszenierung und Produktion haben. Die Art, wie ich es gemacht habe, war genau mit env variabel.

5

Wenn Sie die Anwendung unter IIS hosten, können Sie die Umgebungsvariable in web.config festlegen.

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

es auf generieren veröffentlichen web.config an die Wurzel des Projektes hinzufügen „dotnet veröffentlicht“ wird diese Datei als Grundlage für die eine, die in dem veröffentlichen Ordner erzeugt wird. Dann können Sie den Wert in Ihrem Bereitstellungssystem ä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> 
+0

zu setzen, aber dann müssen Sie mehrere web.config erstellen, eine für jede unterstützte Umgebung wie Entwicklung, uat, prod usw. Ich fand Antwort in diesem SO Post http: // stackoverflow.com/questions/40748518/how-to-configure-mutilple-aspnetcore-environment-on-same-machine Sie können Umgebungsvariable in IIS direkt auf Anwendungsebene festlegen – LP13

+0

Hängt etwas von Use Case ab, wenn es eine Unternehmensumgebung ist Wenn Sie keine Kontrolle über die Hosting-Server haben, können Sie mit web.config die beste Option sein, da die Aktualisierung der IIS-Konfig- oder Benutzerumgebung zu einem langen Prozess führen kann. Wenn Sie die Servereinstellung steuern können, ist die Umgebungsvariable möglicherweise die bessere Option. –

0

Zur Einrichtung zwei oder mehr Profile, müssen Sie zusätzliches Profil erstellen, wie mentioned in a linked article und Ihre launchSettings.json einen Array enthalten:

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

Um in der Lage sein, um die Umgebungsvariable zu lesen, müssen Sie zu specify it during startupund Aufruf zusätzliche Methode AddEnvironmentVariables zu Variablen nehmen Aktion:

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(); 
    } 
} 
0

Einfache Möglichkeit, es in Visual Studio IDE zu setzen.

Projekt> Eigenschaften> Debug> Umgebungsvariablen

enter image description here

Bitte verwenden Sie keine Umgebungsvariablen der Maschine Ebene anstelle Umfang auf die Anwendung, die Möglichkeit einer anderen Anwendung ist gleiche zu tun, Änderungen können sich auf andere Anwendungen auswirken.

Verwandte Themen