2016-08-31 5 views
14

У меня есть 3 среды конкретных appsettings файлов в моем основном приложении .NetКак опубликовать специальные приложения в среде .NET.

enter image description here

в project.json Я имею установку publishOptions как это. (Основано на предложении here)

"publishOptions": { 
    "include": [ 
     "wwwroot",  
     "appsettings.development.json", 
     "appsettings.staging.json", 
     "appsettings.production.json", 
     "web.config" 
    ] 
    }, 

У меня есть 3 соответствующих классов запуска, которые используют соответствующий appsetings на основе среды

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

Однако, когда я опубликовать приложение, то все 3 AppSettings файлов endup во всех средах. Как опубликовать файл appsetting, специфичный для среды?

+3

Может кто-то пожалуйста, ответить на этот вопрос. На самом деле не имеет смысла публиковать все файлы appsettings.json во всех средах. – LP13

ответ

3

Одним из возможных путей были бы запустить prepublish или postpublic скриптов/команду, например, запустив глоток задачу выполняющегося dotnet publish-iis (в качестве альтернативы использовать задачу в prepublish разделе scripts, чтобы скопировать файлы на перед публикацией.

Добавьте это в project.json:

"scripts": { 
    "postpublish": [ "gulp cleanconfig", "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
} 

вы также можете выполнить команду CMD или оболочки здесь Но на самом деле не должно быть никаких причин, почему вы хотели бы сделать это в первую очередь, просто корабль все. 3 appconfig, потому что, например, Azure App Service, вы может переключать режим в зависимости от переменных среды, которые регулируются через Azure Portal, и при публикации, промежуточные и производственные слоты будут просто заменены, но остаются переменными окружающей среды.

Вы не должны хранить секреты в appsettings.json хотя (что я предполагаю, что вы делаете и почему хотите удалить файлы). Вместо этого используйте «секреты пользователя» для разработки и переменных среды для установки строк подключения и т. Д. Для производства. Работает как шарм, особенно с Azure App Services и докерными контейнерами.

+3

У меня нет секретов в настройках. Однако у нас есть строки соединений в appsettings, которые различны для каждой среды. Я думаю, что вполне нормально иметь строку подключения в appsettings. Я действительно не понимаю, почему мне приходится перепрыгивать через обручи, чтобы публиковать специальные настройки приложения. На самом деле это должно быть стандартное поведение процесса публикации. Я не думаю, что кто-то хочет, чтобы все файлы appsettings находились во всех средах. Я думаю, что здесь что-то не хватает. – LP13

+1

Ну, если в строке соединения есть имя пользователя и пароль или ключ api, это секрет. если это не так, также не помешает опубликовать все 3 файла. В чем дело? – Tseng

+2

У него нет идентификатора пользователя/пароля. Также не имеет значения, что данные на самом деле appsetting содержат – LP13

0

Честно говоря, я считаю, что это не правильная задача для построения трубопровода. Также функции публикации dotnet cli очень ограничены. Идите к внешним инструментам, как показал вам Цзэн. Развертывание - это другой домен с собственным набором сложностей, чем строительство.

Существует нет встроенного в dotnet cli вне использования внешних инструментов!

1

Вам нужно на самом деле добавить переменные окружения, according the official tutorial:

var builder = new ConfigurationBuilder() 
    .SetBasePath(env.ContentRootPath) 
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true) 
    // do not forget to add environment variables to your config! 
    .AddEnvironmentVariables(); 
0

Самым простым способом я нашел до сих пор развернуть все конфигурационные файлы, а затем удалить лишние файлы после развертывания завершено. Просто добавьте несколько дополнительных строк в конец оболочки развертывания или пакетного скрипта.

0

В VS2017 Добавление нескольких среды

шаги правильный проект клик -> Добавить -> NewItem - выберите JSon файл - написать имя файла как 'appsettings.staging.json' или «appsettings.production.JSON»

Add appsettings.staging.json file

Output Looks like

+0

Да, он будет работать в VS2017. –