2016-07-04 34 views
7

Mam trzy pliki konfiguracyjne, po jednym dla każdego środowiska:Jak mogę się upewnić, że appsettings.dev.json zostanie skopiowany do folderu wyjściowego?

  1. appsettings.json -> Produkcja
  2. appsettings.dev.json -> Rozwój
  3. appsettings.stg.json -> inscenizacji

Jeżeli ustawić ASPNETCORE_ENVIRONMENT do dev, otrzymuję wyjątek czasu wykonywania narzekają nie mogąc znaleźć appsettings.dev.json. Próbowałem dodanie

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

do sekcji w project.json buildOptions ale nie wydaje się mieć żadnego wpływu.

Czy istnieje inny sposób, aby zmusić appsettings.dev.json do skopiowania do katalogu wyjściowego?

+0

Masz odpowiedź od Ivana. Może warto wskazać, czy to działa dla Ciebie? –

+1

Nie mogłem znaleźć rozwiązania do wdrożenia konkretnego pliku dla środowiska. Można skonfigurować wdrażanie wszystkich plików projektu * .json -http: //stackoverflow.com/questions/37858312/dotnet-publish-doesn%C2%B4t-publish-correct-appsettings-env-environmentname-json Ale to jest nie jest dobrym rozwiązaniem, idealnym scenariuszem jest plik od 1 do 1 na środowisko (nazwa konfiguracji) - nagroda jest otwarta :) –

Odpowiedz

6

Czy ustawiłeś ścieżkę bazową, gdzie znajduje się appsettings.dev.json?

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

To zapobiegnie wyrzucaniu wyjątku, ale nie odpowiada na pytanie, jak upewnić się, że ' Plik .dev.json' jest kopiowany. –

+0

..I sprawdź ścieżkę .vscode/launch.json -> "cwd". Ustawienie dla "$ {workspaceRoot}" na "$ {workspaceRoot} \ src \ myproject" dla mnie działało. – Vladislav

7

Łącznie to w „project.json” działa na mnie:

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

Nie działa dla mnie. To działało przez jakiś czas, ponieważ projekt.json został zmieniony i spowodował przebudowę projektu. Działa tylko rozwiązanie - wywołaj przebudowę zamiast kompilacji. Działa zarówno z opcjami kompilacji, jak i publishOptions. – VorobeY1326

2

Zakłada używasz programu Visual Studio:

typowo dla usług w przeszłości miałem innych deweloperów skonfigurować "Twórz wydarzenia", które zapewniają, że pewne rzeczy w projekcie zostaną zbudowane. Zazwyczaj byłoby to w ASP.NET właściwości projektu dla Visual Studio 2015 jako przykład:> "Build Events" (lewy panel)> Kliknij "Edit Post-build". Napisz w instrukcjach wiersza polecenia, w jaki sposób projekt powinien być zbudowany na wyjście. EG:

mkdir "$(ProjectDir)bin\Setup" 

utworzyć katalog pod bin o nazwie 'Konfiguracja'

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

Usuwa wszelkie istniejące elementy w nowo utworzonym bin

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

Kopie dll z miejsca budowy do nowej konfiguracji lokalizacja

Teraz, jeśli robisz proces kompilacji, w którym działa "Menedżer konfiguracji" g różnych danych wyjściowych dla każdego środowiska i po prostu chcesz, aby każdy z nich przez cały czas prawdopodobnie musiał przejść przez wyższy poziom, znaleźć te pojemniki po imieniu "dev" lub "stg", a następnie skopiować je z powrotem. Możesz być w stanie utworzyć lub wyświetlić zmienną, którą VS zna dla środowiska, która pasuje do danych JSON.