Diese Umweltsachen scheinen für die meisten Menschen zu funktionieren, aber ich bin mit all dem Umweltmanagement überhaupt nicht einverstanden. Ob die Laufzeit oder das Zielsystem weiß, was es ist. Nur Sie als Entwickler oder Bereitstellungsmechanismus kennen das Zielsystem.
Alle reden über die Variable ASPNETCORE_ENVIRONMENT, sogar über die offizielle Dokumentation wie hier https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-3.0. Tatsächlich muss jemand ein System explizit als Produktionssystem definieren, indem er beispielsweise ASPNETCORE_ENVIRONMENT einmal manuell einstellt. Möchten Sie wirklich davon ausgehen und sich darauf verlassen, dass dies bereits in jeder von Ihnen verwendeten Umgebung festgelegt ist? Nein, das kannst du nicht. Was ist, wenn Sie eine Konsolen-App auf einem Batch-Server bereitstellen müssen, auf dem keine Website ausgeführt wird? ASPNETCORE_ENVIRONMENT ist nicht verfügbar. Was ist, wenn Sie eine .net Core-Webapi ohne IIS nur mit Turmfalke bereitstellen und ausführen müssen? Keine web.config und keine Umgebungsvariable. Möchten Sie, dass Ihre Administratoren / Ihr Betriebsteam diese irreführende Variable für Ihre Konsolen-App festlegen? In diesem Zusammenhang habe ich viele Projekte gesehen, die Appsettings wie dieses pro Projekt haben:
appsettings.json
appsettings.development.json
appsettings.test.json
appsettings.uat.json
appsettings.staging.json
appsettings.production.json
Beachten Sie, dass standardmäßig jede dieser Dateien veröffentlicht und auch auf dem Zielsystem bereitgestellt wird. Auf den ersten Blick sieht es sehr einfach aus, die Umgebung "entscheiden" zu lassen, welche Konfiguration verwendet werden soll. Sie haben jedoch Konfiguration und möglicherweise auch Anmeldeinformationen auf einem System bereitgestellt, das nicht für dieses System vorgesehen ist.
Fazit
Ich empfehle appsettings.json + appsettings.release.json. Erstens ist nur für Entwickler. Ändere es, spiele damit, wie du willst. Die letzte ist eine GÜLTIGE Konfiguration, die für die Bereitstellung (den Prozess) bereit ist. Transformieren Sie die Konfiguration vor Beginn der Bereitstellung so, dass sie für das Zielsystem bereit ist. Das ist es. Keine Notwendigkeit, sich auf Einstellungen auf dem Zielcomputer zu verlassen, keine unordentlichen Konfigurationen. Behalten Sie die volle Kontrolle über Ihre App, auch wenn sich Server schnell ändern (z. B. Skalierung im Allgemeinen, VMs, Cloud usw.).
Ich freue mich über konstruktives Feedback :-)
new ConfigurationBuilder().AddEnvironmentVariables()
und gefundenASPNETCORE_ENVIRONMENT
.