2016-07-04 8 views
7

Ich habe drei Konfigurationsdateien, eine für jede Umgebung:Wie kann ich sicherstellen, dass appsettings.dev.json in den Ausgabeordner kopiert wird?

  1. appsettings.json -> Produktion
  2. appsettings.dev.json -> Entwicklung
  3. appsettings.stg.json -> Inszenierung

Wenn ich gesetzt ASPNETCORE_ENVIRONMENT-dev, erhalte ich eine Ausnahme Laufzeit beschweren sich über nicht in der Lage appsettings.dev.json zu finden. Ich habe versucht, das Hinzufügen

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

zum buildOptions Abschnitt in project.json aber es scheint keine Wirkung zu haben.

Gibt es eine andere Möglichkeit, erzwingen appsettings.dev.json in das Ausgabeverzeichnis kopiert werden?

+0

Sie haben eine Antwort von Ivan. Vielleicht ist es eine gute Idee zu zeigen, ob das für Sie funktioniert? –

+1

Ich konnte keine Lösung für die Bereitstellung einer bestimmten Datei pro Umgebung finden. Sie könnten konfigurieren, alle Projekt * .json-Dateien bereitzustellen -http: //stackoverflow.com/questions/37858312/dotnet-publish-doesn%C2%B4t-publish-correct-appsettings-env-environmentname-json Aber das ist keine gute Option, das perfekte Szenario ist die 1 zu 1 Datei pro Umgebung (Konfigurationsname) - das Kopfgeld ist offen :) –

Antwort

6

Haben Sie den Basispfad für appsettings.dev.json festgelegt?

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

Dies wird verhindern, dass die Ausnahme geworfen wird, aber nicht die Frage beantworten, wie man das '' sicherstellt .dev.json' Datei wird kopiert. –

+0

..Und überprüfe deinen .vscode/launch.json -> "cwd" Pfad. Die Einstellung von "$ {workspaceRoot}" nach "$ {workspaceRoot} \ src \ meinprojekt" funktionierte für mich. – Vladislav

7

Einschließlich dieser in "project.json" funktioniert für mich:

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

Hat nicht für mich gearbeitet. Es hat einmal funktioniert, weil project.json geändert wurde und das Projekt neu aufgebaut wurde. Nur Lösung funktioniert - rufen Sie Rebuild statt Build auf. Es funktioniert mit Kompilierungsoptionen und PublishOptions. – VorobeY1326

2

vorausgesetzt, dass Sie Visual Studio verwenden:

Typisch für Dienste in der Vergangenheit habe ich hatte andere Devs einrichten 'Build Events' sorgen dafür, dass bestimmte Dinge im Projekt entstehen. In der Regel ist dies in ASP.NET-Projekteigenschaften für Visual Studio 2015 der Fall:> 'Ereignisse erstellen' (linker Bereich)> Klicken Sie auf 'Post-Build bearbeiten'. Schreiben Sie in Befehlszeilenanweisungen, wie das Projekt für die Ausgabe erstellt werden soll. Beispiel:

mkdir "$(ProjectDir)bin\Setup" 

ein Verzeichnis unter ist 'Setup'

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

Löscht alle vorhandenen Elemente in der neu geschaffenen sind

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

Kopien DLL von Build Speicherort an den neuen Setup aufgerufen erstellen Standort

Jetzt, wenn Sie einen Build-Prozess machen, wo Ihr 'Configuration Manager' doin ist Wenn Sie für jede Umgebung eine andere Ausgabe wünschen und Sie möchten, dass Sie sie alle zu jeder Zeit haben, müssten Sie wahrscheinlich ein Level durchlaufen, diese Bins mit dem Namen "dev" oder "stg" suchen und sie dann zurückkopieren. Sie können möglicherweise eine Variable erstellen oder auflisten, die VS für die Umgebung kennt, die mit Ihren JSON-Daten übereinstimmt.