Hvordan håndtere feilsøke / release config transformasjoner i ASP.NET vNext

stemmer
24

I tidligere versjoner av ASP.NET mange av oss brukte Web.Debug.config/ Web.Release.configfiler trasformations som ville se omtrent slik ut:

web.config :

<connectionStrings>
  <add name=AppDB connectionString=Data Source=(LocalDb)\\... />
</connectionStrings>

Web.Release.config :

<connectionStrings>
  <add name=AppDB connectionString=Data Source=(ReleaseDb)\\...  xdt:Transform=SetAttributes xdt:Locator=Match(name)/>
</connectionStrings>

Pr ASP.NET vNext opplæringen du fortsatt kan bruke Web.config. Men config.jsonsynes å være den nye måten å håndtere konfigurasjoner nå som per den samme artikkelen:

config.json

{
    Data: {
        DefaultConnection: { 
            ConnectionString: Server=(localdb)\\...
        }
    }
}

Og i Startup.cs :

var configuration = new Configuration();
configuration.AddJsonFile(config.json);
configuration.AddEnvironmentVariables();

Så jeg lurer på hva som ville være den foreslåtte måten å håndtere config-transofrmation med dette skiftet til JSON?

Publisert på 20/10/2014 klokken 14:48
kilden bruker
På andre språk...                            


3 svar

stemmer
20

vNext bruker en ny konfigurasjon system der du kan lese miljøvariabler gjennom koden. Så, i dette tilfellet ville du se på tilstedeværelsen av den aktuelle miljøvariabelen og omfatter tilsvarende JSON gjennom koden.

For eksempel kan du lage en qa.json og prod.json. Sett en miljøvariabel, sier, "ENV" som peker til "qa" og "prod" i de respektive miljøer. Deretter betinget kan du legge til det aktuelle JSON.

Koden kan se slik ut:

1) default.json inneholder alle standard ting.

2) qa.json og prod.json inneholde de nødvendige styringer.

3) Siden qa.json og prod.json kommer senere, vil de vinne. Hvis det er en "setting1" i default.json og qa.json, vil den automatisk plukke opp "setting1" i qa.json

 var configuration = new Configuration()
                     .AddJsonFile("default.json")
                     .AddEnvironmentVariables(); 

 var envSpecificJson = configuration.Get("ENV") + ".json";
 configuration.AddJsonFile(envSpecificJson);
Svarte 21/10/2014 kl. 03:32
kilden bruker

stemmer
4

Mens det forrige svaret (e) tilbyr en god løsning jeg ønsker å presentere en alternativ en:

Kode

var configuration = new Configuration()
                     .AddJsonFile("config.json")
                     .AddEnvironmentVariables();

Nærmiljø: Her har du "config.json" fil med alle innstillingene. Det er lett redigert og vedlikeholdes.

Prod miljø : Når distribusjon du utelater "config.json" filen. Som det er mangler, vil koden se etter neste kilde i kjeden som er miljøvariabler. Så når på din lokale maskin, kan du bruke konfigurasjonsfilen. Når på serveren, falle tilbake til de miljøvariabler. Merk at konfigurasjonsnøklene må selvsagt heter det samme i filen og miljøvariabler.

Svarte 01/04/2015 kl. 08:54
kilden bruker

stemmer
2

Som standard vil ASP.NET se etter en miljøvariabel som heter "ASPNET_ENV" for å sette IHostingEnvironment er EnvironmentName variabel.

Den aktuelle koden kan sees her:

https://github.com/aspnet/Hosting/blob/77e2dc263f11655312d4c73bb8e22d7b6254d485/src/Microsoft.AspNet.Hosting/HostingFactory.cs

Du kan gjøre noe sånt som følgende hvis du endrer ASPNET_ENV verdi på servere i ulike miljøer:

var configuration = new Configuration()
            .AddJsonFile("config.json")
            .AddEnvironmentVariables();
if (string.Equals(env.EnvironmentName, "Prod", StringComparison.OrdinalIgnoreCase))
{
            configuration.AddJsonFile("prod.config.json");
}
Svarte 07/04/2015 kl. 03:05
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more