Как я могу гарантировать, что appsettings.dev.json будет скопирован в выходную папку?

У меня есть три файла конфигурации, по одному для каждой среды:

  • appsettings.json → production
  • appsettings.dev.json → разработка
  • appsettings.stg.json → постановка

Если я установлю ASPNETCORE_ENVIRONMENT на dev, я получаю исключение во время выполнения, которое жалуется на то, что не сможет найти appsettings.dev.json. Я попробовал добавить

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

в раздел buildOptions в project.json, но он, похоже, не имеет никакого эффекта.

Есть ли другой способ заставить appsettings.dev.json копироваться в выходной каталог?

Ответ 1

Включение этого в "project.json" работает для меня:

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

Ответ 2

Установлен ли базовый путь, где находится appsettings.dev.json?

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

Ответ 3

В моем случае appsettings.json не копируется для юнит-тестов.

Если вы щелкнете правой кнопкой мыши по файлу и выберете Свойства, появится это диалоговое окно. Измените Build Action на Embedded resource, и файл будет скопирован в папку bin для модульного теста.

enter image description here

Ответ 4

Предполагается, что вы используете Visual Studio:

Как правило, для служб в прошлом у меня были другие разработчики, настроенные "Build Events", которые гарантируют, что некоторые вещи в проекте будут построены. Как правило, это было бы в свойствах проекта ASP.NET для Visual Studio 2015 в качестве примера: > "Build Events" (левая панель) > Нажмите "Редактировать пост-сборку". Напишите в командной строке инструкции о том, как проект должен строить для вывода. EG:

mkdir "$(ProjectDir)bin\Setup"  

создать каталог из bin под названием 'Setup'

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

Удаляет все существующие элементы во вновь созданной ячейке

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

Копирование dll из местоположения сборки в новое место установки

Теперь, если вы выполняете процесс сборки, где ваш "Configuration Manager" выполняет разные выходные данные для каждой среды, и вы просто хотите, чтобы каждый из них всегда мог пройти по уровню, найдите эти бункеры имя 'dev' или 'stg', а затем скопируйте их обратно. Возможно, вы сможете создать или перечислить переменную, которую VS знает для среды, которая соответствует вашим данным JSON.

Ответ 5

В appsettings.dev.json решений щелкните правой кнопкой мыши файл, который требуется скопировать на выход (в вашем случае appsettings.dev.json), и нажмите " Свойства". В панели "Свойства" установите для параметра " Копировать в каталог вывода" значение " Всегда копировать". Таким образом, каждый раз, когда вы собираете свой проект, ваш файл будет копироваться в выходной каталог (ваш проектный каталог или каталог выпуска в зависимости от вашего профиля сборки)