2016-07-04 38 views
7

Ho tre file di configurazione, uno per ogni ambiente:Come posso garantire che appsettings.dev.json venga copiato nella cartella di output?

  1. appsettings.json -> produzione
  2. appsettings.dev.json -> sviluppo
  3. appsettings.stg.json -> messa in scena

Se ho impostato ASPNETCORE_ENVIRONMENT-dev, ottengo un'eccezione di runtime lamentano di non essere in grado di trovare appsettings.dev.json. Ho provato ad aggiungere

"copyToOutput": [ 
    "appsettings.dev.json" 
] 

alla sezione buildOptions in project.json ma non sembra avere alcun effetto.

C'è un altro modo in cui posso imporre appsettings.dev.json per essere copiato nella directory di output?

+0

Hai una risposta da Ivan. Forse è una buona idea indicare se questo funziona per te? –

+1

Non sono riuscito a trovare una soluzione per distribuire un file specifico per ambiente. È possibile configurare la distribuzione di tutti i file progetto * .json -http: //stackoverflow.com/questions/37858312/dotnet-publish-doesn%C2%B4t-publish-correct-appsettings-env-environmentname-json Ma questo è opzione non buona, lo scenario perfetto è il file 1 a 1 per ambiente (nome di configurazione) - il bounty è aperto :) –

risposta

6

Hai impostato il percorso di base in cui è posizionato appsettings.dev.json?

var builder = new ConfigurationBuilder() 
    .SetBasePath(env.ContentRootPath) 
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 
+1

Ciò impedirà l'esecuzione dell'eccezione, ma non risponde alla domanda su come assicurarsi che il ' Il file .dev.json' viene copiato. –

+0

..E controlla il tuo percorso .vscode/launch.json -> "cwd". L'impostazione da "$ {workspaceRoot}" a "$ {workspaceRoot} \ src \ myproject" ha funzionato per me. – Vladislav

7

Compreso questo in "project.json" funziona per me:

... 
"publishOptions": { 
    "include": [ 
    "wwwroot", 
    ... 
    "appsettings.json", 
    "appsettings.Development.json", 
    ... 
    ] 
}, 
... 
+0

Non ha funzionato per me. Ha funzionato per una volta perché project.json è stato modificato e ha causato la ricostruzione del progetto. Solo soluzione funzionante: chiama la ricostruzione anziché la generazione. Funziona con entrambe le opzioni di compilazione e publishOptions. – VorobeY1326

2

presume l'utilizzo di Visual Studio:

In genere per i servizi nel passato ho avuto altri sviluppatori istituiti 'Costruisci eventi' per garantire che alcune cose nel progetto vengano create. In genere, si tratta delle proprietà del progetto ASP.NET per Visual Studio 2015 come esempio:> "Crea eventi" (riquadro a sinistra)> Fai clic su "Modifica post-generazione". Scrivi nelle istruzioni della riga di comando di come il progetto deve essere generato per l'output. EG:

mkdir "$(ProjectDir)bin\Setup" 

creare una directory sotto bin chiamata 'Setup'

Del "$(ProjectDir)bin\Setup\*.* /Q" 

Elimina tutti gli elementi esistenti nel bidone appena creato

copy "$(TargetDir)*.dll" "$(ProjectDir)bin\Setup" 

copie di DLL da percorso di generazione alla nuova impostazione posizione

Ora se si sta eseguendo un processo di compilazione in cui è in esecuzione il 'Configuration Manager' g un output diverso per ogni ambiente e vuoi semplicemente ognuno di essi in ogni momento che probabilmente avrai bisogno di attraversare un livello, trovare quei contenitori con il loro nome di 'dev' o 'stg' e quindi copiarli indietro. Potrebbe essere possibile creare o elencare una variabile che VS conosce per l'ambiente che corrisponde ai dati JSON.