2016-06-06 14 views
11

LT;DRCome ignorare un ambiente array di configurazione ASP.NET core utilizzando le variabili d'ambiente

In un'applicazione ASP.NET Nucleo Ho un file di configurazione appsettings.json che utilizza una matrice JSON per configurare una serie di impostazioni.

Come sovrascrivere un'impostazione di uno degli oggetti array utilizzando le variabili di ambiente?

Sfondo

Sto utilizzando serilog in un'applicazione ASP.NET nucleo e con il Serilog.Settings.Configuration, per consentirgli di essere configurato tramite appsettings.json.

La configurazione è simile a questo:

{ 
    "Serilog": { 
    "Using": ["Serilog.Sinks.Literate"], 
    "MinimumLevel": "Debug", 
    "WriteTo": [ 
     { "Name": "File", "Args": { "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt" } } 
    ], 
    "Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"], 
    "Properties": { 
     "Application": "Sample" 
    } 
    } 
} 

Quando schierato voglio ignorare alcune delle impostazioni, per esempio MinimumLevel e il percorso del file di registro. La mia opzione preferita è di farlo tramite variabili di ambiente mentre sto distribuendo su un servizio app di Azure, quindi utilizzerò le impostazioni dell'app attraverso il portale di gestione di Azure (queste sono realizzate come variabili di ambiente).

posso facilmente impostare il MinimumLevel con l'aggiunta di una variabile d'ambiente con il nome: Serilog:MinimumLevel e il nome dell'applicazione Serilog:Properties:Application.

Qual è il formato per specificare un'impostazione con un array?

+1

Ho avuto lo stesso problema - non ho potuto resistere alla magia di nomi, due punti e gli indici degli array (Serilog: WriteTo: 0: Args: percorso) e un paio di mesi fa ho scritto un nuovo fornitore di configurazione per rendere questo tipo di configurazione più semplice - https://github.com/dsbenghe/NotMicrosoft.Configuration – Dumitru

risposta

15

Dopo aver esaminato la configurazione nel debugger, ho trovato la risposta.

Serilog:WriteTo:0:Args:path

Così ho bisogno di utilizzare l'indice array (base zero) come se si trattasse di un nome.

Sotto la schermata del debugger nel caso in cui aiuta, anche (grazie a Victor Hurdugaci nei commenti), il unit tests è un buon posto per cercare esempi.

configuration in the debugger

+5

I test sono un altro ottimo posto per cercare degli esempi: https://github.com/aspnet/Configuration/blob/dev/test/ Microsoft.Extensions.Configuration.Binder.Test/ConfigurationCollectionBindingTests.cs –

+2

@VictorHurdugaci Link è morto. Eccone uno aggiornato: https://github.com/aspnet/Configuration/blob/6cc477ed493e5b0da3c8f609488d667dc65a5576/test/Config.Binder.Test/ConfigurationCollectionBindingTests.cs –

+0

@ jaanus-varus Forse, ma quello nella risposta non è, come usato un collegamento basato sul tag di rilascio. –

Problemi correlati