У меня есть приложение для 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" />
Любые рекомендации или помощь в этом отношении очень важны.