Не уверен, что ваши настройки сложнее, но у нас есть похожая проблема, и мы добавили класс пользовательских действий, который обновляет файлы конфигурации в зависимости от среды (которую пользователь выбирает во время установки), затем вы добавляете этот проект пользовательских действий в ваш проект установки. Таким образом, вы используете одну программу установки независимо от того, в какую среду вы устанавливаете.
Дайте мне знать, если вы заинтересованы, и я могу опубликовать несколько примеров или дополнительную информацию о том, как мы это сделали.
Вот еще несколько деталей:
- Добавьте новый диалог в ваш проект установки, чтобы запросить среду у пользователя (мы используем диалог с 4 переключателями с четырьмя имеющимися у нас средами: dev, qa, staging и production)
- Сконфигурируйте значения 4-х переключателей и свойство, которое будет устанавливать это значение, то есть «среда» (для последнего будет использоваться классом CustomActions)
- Добавление проекта dll в ваше решение с помощью одного класса (CustomActions)
в классе CustomAction вы читаете свойство, которое мы настроили на втором шаге, как:
if(!this.Context.Parameters.ContainsKey("environment"))
{
string error = "'environment' argument is null. Please configure config file manually";
//...handle your error, etc.
return;
}
string env = this.Context.Parameters["environment"];
теперь ваша переменная env содержит значение, которое мы присвоили каждой радиокнопке на шаге. Затем вы можете использовать оператор switch, чтобы решить, какую среду выбрал пользователь. и обновите ваш файл конфигурации соответствующим образом:
Конфигурация конфигурации = ConfigurationManager.OpenExeConfiguration (this.servicePath);
// например, чтобы изменить строки подключения, которые вы используете:
config.ConnectionStrings.ConnectionStrings ["oracle"] = "Строка dev conn here";
Вернувшись в проект установки, добавьте выходные данные проекта CustomActions в свой редактор CustomActions (меню «Вид» -> «Редактор» -> «Пользовательские действия»)
Наконец, настройте свойство CustomActionData вашего проекта установки для передачи среды и других переменных в класс CustomAction (мой выглядит примерно так:
/ serviceFolder = "[TARGETDIR] \" /serviceExe="blahblah.exe "/ serviceName =" MyServiceName "/ environment =" [ENVIRONMENT] "
Надеюсь, что это имеет смысл и относится к вашему решению!