9

Mam aplikację ASP.NET Core (Web Api). Dokumentacja wyjaśniła working with multiple environments, ale nie wyjaśniono, jak ustawić aspnetcore_environment podczas publikowania strony internetowej.Jak ustawić środowisko aspnetcore w pliku publikacyjnym?

Więc powiedzmy, że jeśli mam 3 środowisk Development, Staging i Production

  1. w klasycznych aplikacji ASP.NET Web i użyte do wygenerowania 3 konfiguracje kompilacji. Development, Staging i Production (jak pokazano na rysunku poniżej). a następnie 3 .pubxml plików, po jednym dla każdej konfiguracji. Czy muszę używać tego samego podejścia do aplikacji ASP.NET Core?

  2. Jak ustawić aspnetcore_environment w pliku .pubxml?

  3. Jeśli podejście określone w pytaniu 1 jest przestarzałe, to jakie jest podejście alternatywne? (Używam Jenkins dla CI)

enter image description here

Update 1

Rozumiem, że muszę ustawić ASPNETCORE_ENVIRONMENT jednak nie jestem w stanie zrozumieć, gdzie możemy ustawić to? W trakcie rozwoju mogę ustawić to w profilu w launchSettings.json, jednak pytanie brzmiało, w jaki sposób ustawić to podczas publikowania do przemieszczania lub produkcji? czy ustawiamy zmienną środowiskową na samym serwerze docelowym?

enter image description here

Aktualizacja 2
znalazłem artykuł, który wyjaśnia here różne sposoby ustawiania zmiennej środowiskowej. To częściowo odpowiedział na moje pytanie. Jednak kiedy opublikować aplikację, proces publikowania nie honoruje zmienną środowiskową podczas publikowania appsettings.{env.EnvironmentName}.json
stworzyłem osobny post na to pytanie

+2

Możliwy duplikat [Przekaż hostingu środowisko do samodzielnego hostowania] (http://stackoverflow.com/questions/39203820/pass-hosting-environment- dla-siebie -hosting). Na to pytanie już tam udzielono odpowiedzi. Po prostu użyj komendy/powershell/bash/azureportal, aby ustawić zmienną środowiskową – Tseng

Odpowiedz

0

Myślę, że nie można tego zrobić w profilu publikowania. Musisz ustawić zmienną środowiskową, np. ASPNETCORE_ENVIRONMENT = Inscenizacja. Musiałem zrobić coś podobnego z podstawową aplikacją ASPNET na Azure. Chciałem mieć dev, inscenizację i produkcję. Sposób, w jaki to zrobiłem był dokładnie ze zmienną env.

5

Podczas hostowania aplikacji w IIS można ustawić zmienną środowiskową w pliku web.config.

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

Aby wygenerować go na opublikowanie dodać web.config do głównego projektu „DotNet publikuje” będzie wykorzystywać ten plik jako podstawa do tego, który jest generowany w folderze publikowania. Następnie możesz zmienić wartość w swoim systemie wdrażania.

<?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

, ale musisz utworzyć wiele web.config, po jednym dla każdego wspieranego środowiska, takiego jak programowanie, uat, prod itp. Znalazłem odpowiedź w tym poście SO http: // stackoverflow.com/questions/40748518/how-to-configure-mutilple-aspnetcore-environment-on-same-machine Możesz ustawić zmienną środowiskową w IIS bezpośrednio na poziomie aplikacji – LP13

+0

Zależy trochę od przypadku użycia, jeśli jest to środowisko korporacyjne gdzie nie masz kontroli nad serwerem hostingowym, wykonując go przez web.config, może być najlepszą opcją, ponieważ uzyskanie przez kogoś aktualizacji konfiguracji IIS lub środowiska użytkownika może być długim procesem. Jeśli masz kontrolę nad ustawieniem serwera, zmienna środowiskowa może być lepszą opcją. –

0

Aby ustawić dwa lub więcej profili, należy utworzyć dodatkowy profil, jak mentioned in a linked article, a twoja launchSettings.json będzie zawierać tablicę:

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

aby móc odczytać zmienną środowiskową, trzeba do specify it during startupi wezwanie dodatkową metodę AddEnvironmentVariables do zmiennych podjąć działania:

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

Prosty sposób na ustawienie go w IDE studio visual.

zmienne Projekt> Właściwości> Debug> Środowisko

enter image description here

Proszę nie używać zmiennych środowiskowych na poziomie maszynowym zamiast zakresie do wniosku, istnieje możliwość innej aplikacji robi same, zmiana może wpłynąć na inną aplikację.