Wenn ich meine asp.net-Kernwebanwendung in meinem lokalen Dateisystem veröffentliche, werden immer die Produktionskonfiguration und die Variable ASPNETCORE_ENVIRONMENT mit dem Wert = "Produktion" verwendet.
Wie und wo muss ich den Wert der Variablen ASPNETCORE_ENVIRONMENT festlegen, damit er nicht nur für das Debuggen, sondern auch für die Veröffentlichung berücksichtigt wird ? Ich habe bereits die folgenden Optionen ohne Erfolg ausprobiert:
- in Windows-Einstellungen
- in der .pubxml-Datei
- in launchSettings.json
- in project.json
Antworten:
Neben den oben genannten Optionen gibt es noch einige andere Lösungen.
1. Ändern der Projektdatei (.CsProj)
MSBuild unterstützt die
EnvironmentName
Eigenschaft, mit deren Hilfe Sie die richtige Umgebungsvariable für die Umgebung festlegen können, die Sie bereitstellen möchten. Der Umgebungsname wird während der Veröffentlichungsphase in der Datei web.config hinzugefügt.Öffnen Sie einfach die Projektdatei (* .csProj) und fügen Sie das folgende XML hinzu.
Der obige Code fügt den Umgebungsnamen wie
Development
bei der Debug-Konfiguration hinzu oder wenn keine Konfiguration angegeben ist. Bei jeder anderen Konfiguration befindet sich der UmgebungsnameProduction
in der generierten Datei web.config. Weitere Details hier2. 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 unterProperties/PublishProfiles/{profilename.pubxml}
Dies wird der Umgebungsname in web.config festgelegt, wenn das Projekt veröffentlicht wird. Weitere Details hier3. Befehlszeilenoptionen mit Dotnet Publish
Zusätzlich können wir die Eigenschaft
EnvironmentName
als Befehlszeilenoption an dendotnet publish
Befehl übergeben. Der folgende Befehl würde die Umgebungsvariable wieDevelopment
in der Datei web.config enthalten.dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
quelle
dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development
ist genau das, wonach ich gesucht habe. Vielen Dank!Option 1:
So legen Sie die Umgebungsvariable ASPNETCORE_ENVIRONMENT in Windows fest:
Befehlszeile -
setx ASPNETCORE_ENVIRONMENT "Development"
Power Shell -
$Env:ASPNETCORE_ENVIRONMENT = "Development"
Weitere Betriebssysteme finden Sie unter https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments
Option 2:
Wenn Sie ASPNETCORE_ENVIRONMENT mit festlegen möchten,
web.config
fügen SieaspNetCore
Folgendes hinzu:quelle
Einfache Möglichkeit, es in der Visual Studio IDE einzustellen.
Projekt> Eigenschaften> Debug> Umgebungsvariablen
quelle
Befolgen Sie die Anweisungen in der Dokumentation unter Verwendung der
web.config
.Beachten Sie, dass Sie auch andere Umgebungsvariablen festlegen können.
quelle
So können wir zur Laufzeit einstellen:
quelle
Mit der neuesten Version von dotnet cli (2.1.400 oder höher) können Sie einfach diese msbuild-Eigenschaft festlegen
$(EnvironmentName)
und das Veröffentlichungswerkzeug sorgt dafür, dass der web.config ASPNETCORE_ENVIRONMENT mit dem Umgebungsnamen hinzugefügt wird.XDT-Unterstützung ist ab 2.2.100-Vorschau1 verfügbar.
Beispiel: https://github.com/vijayrkn/webconfigtransform/blob/master/README.md
quelle
you can just set this msbuild property $(EnvironmentName) and publish
oder eine Referenz angeben?Erstellen Sie Ihre Appsettings. *. JSON-Dateien. (Beispiele: appsettings.Development.json, appsettings.Staging.json, appsettings.Production.json)
Fügen Sie diesen Dateien Ihre Variablen hinzu.
Erstellen Sie für jede Umgebung ein separates Veröffentlichungsprofil, wie Sie es normalerweise tun würden.
Öffnen Sie PublishProfiles / Development.pubxml (die Benennung basiert auf dem, was Sie als Veröffentlichungsprofil bezeichnet haben).
Fügen Sie dem PublishProfile einfach ein Tag hinzu , um die Variable EnvironmentName festzulegen, die Namenskonvention für Appsettings. *. Json-Dateien erledigt den Rest.
Referenz: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-3.1
Weitere Informationen finden Sie im Abschnitt „Einstellen der Umgebung“.
quelle
Diese Variable kann in json gespeichert werden. Zum Beispiel envsettings.json mit dem folgenden Inhalt
Ändern Sie später Ihre program.cs wie folgt
Auf diese Weise wird es immer in die Veröffentlichung einbezogen, und Sie können je nach Umgebung, in der die Website gehostet wird, den erforderlichen Wert ändern. Diese Methode kann auch in der Konsolen-App verwendet werden, da sich die Änderungen in Program.cs befinden
quelle
Ich habe festgestellt, dass es für mich funktioniert, indem ich diese Variable direkt auf Azure platorm festgelegt habe (falls Sie sie verwenden). Wählen Sie einfach Ihre Webanwendung -> Konfiguration -> Anwendungseinstellungen aus, fügen Sie die Variable und ihren Wert hinzu und klicken Sie dann auf die Schaltfläche Speichern.
quelle
Eine andere Option, die wir in unseren Projekten verwenden, um die Umgebung pro Site festlegen zu können, besteht darin, dem Projekt eine Parameters.xml-Datei mit folgendem Inhalt hinzuzufügen:
Die Erstellungsaktion für diese Datei lautet " Inhalt" und die Kopieraktion lautet " Kopieren, wenn sie neuer ist", sodass sie Teil des zu implementierenden Pakets ist.
Um das Paket bereitzustellen und die Umgebung in der Version unter der Aufgabe "WinRM - IIS-Webanwendungsbereitstellung" festzulegen (dies funktioniert genauso gut, wenn die Aufgabe "IIS-Webanwendungsbereitstellung" verwendet wird), legen wir zusätzliche Argumente für msdeploy fest ::
Auf diese Weise können wir mehrere Releases haben, die alle dasselbe Artefakt verwenden, aber als unterschiedliche Umgebungen bereitgestellt werden.
quelle
Ich weiß, dass dies ein alter Beitrag ist, dachte jedoch, ich würde meine einfache Lösung in die Mischung einfließen lassen, da niemand dies vorgeschlagen hat.
Ich benutze das aktuelle Verzeichnis, um die aktuelle Umgebung zu bestimmen, und drehe dann die Verbindungszeichenfolge und die Umgebungsvariable um. Dies funktioniert hervorragend, solange Sie eine Namenskonvention für Ihre Site-Ordner wie test / beta / sandbox haben.
quelle