Перейдите в соответствующий файл конфигурации на основе переменной среды, не создавая приложение несколько раз - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть приложение для Windows, разработанное на c #, которое имеет 3 файла конфигурации, а именно dev.config, qa.config и prod.config.

В моем основном app.config я написал что-то вроде этого:

<appSettings configSource="dev.config" />

И когда я развертываю в другой среде, я редактирую файл app.config из двоичных файловизмените его на соответствующий файл конфигурации и разверните его (скопируйте и вставьте двоичные файлы в виртуальную машину).

Чтобы автоматизировать это, сначала я добавил событие предварительной сборки, которое заменяет полный файл app.config на соответствующий файл среды, используя xcopy, как упоминалось в этом ответе.
Проблема в том, что мне пришлось собирать код 3 раза для развертывания в 3 разных средах.

MSBuild.exe "C:\test\TestProject.sln" /t:Rebuild /p:Configuration=dev
MSBuild.exe "C:\test\TestProject.sln" /t:Rebuild /p:Configuration=qa
MSBuild.exe "C:\test\TestProject.sln" /t:Rebuild /p:Configuration=prod

Создает 3 двоичных файла отдельно в 3 разных папках dev, qa, prod в папке bin.

Я также прочитал о slow cheetah, что также делает нечто подобное. Мне приходится снова и снова собирать код для другой среды на основе Configuration Manager.

Я не знаю, возможно ли это, но мое требование состоит в том, чтобы собирать один раз и развертывать одни и те же двоичные файлы в разных средах. На сервере, где бы я ни развертывал, у меня будет установлена ​​системная переменная средыкак:

environmentType = dev or qa or prod 

И где-то в коде я должен прочитать переменную окружения

System.Environment.GetEnvironmentVariable("environmentType")

и сопоставить с соответствующим файлом конфигурации.Короче говоря, не должно быть никакого ручного вмешательства для изменения чего-либо, или не должно быть построено многократно.

Или я могу как-то прочитать переменную среды в app.config и написать что-то вроде:

if env = "dev"
 <appSettings configSource="dev.config" />
else if env ="qa"
 <appSettings configSource="qa.config" />
else 
 <appSettings configSource="prod.config" />

Любые рекомендации или помощь в этом отношении очень важны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...