Развертывание консольного приложения .NET 4.0 в различных средах

Я создал консольное приложение, отвечающее за генерацию экспорта данных из базы данных. Это должно быть развернуто на пакетном сервере, который отличается от того, где работает база данных. В app.config мне нужно настроить строку подключения к базе данных. У меня есть около восьми сред, в которых мне нужно развернуть это консольное приложение. До сих пор мне нужно было хранить исходный файл конфигурации для каждой среды и копировать его отдельно в папку установки.

Первое, что я знаю, это добавление файлов в проект установки в Visual Studio. Рядом с основным выводом я добавил все файлы конфигурации со свойством условия. Я добавил экран в мастер установки (текстовое поле), где я прошу пользователя, устанавливающего систему, ввести имя среды, как я указал. Я успешно настроил это в одном из проектов установки, но в двух проектах мое решение неверно. В них я всегда получаю свой файл app.config в папке установки, а не файл конфигурации, который я создал в проекте установки. Когда я переименовываю файлы, я вижу их только тогда, когда я ввожу правильные данные во время установки. Итак, я предполагаю, что мои файлы каким-то образом перезаписываются app.config из моего проекта.

Результат сборки моей установки:

Building file 'C:\MyProject\MyProject.Setup\Deploy\MyProject.msi'...
Packaging file 'MyProject.exe.config'...
Packaging file 'MyProject.exe'...
Packaging file 'MyProject.exe.config'...
Packaging file 'MyProject.exe.config'...

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


person René    schedule 14.12.2012    source источник


Ответы (2)


Если речь идет только о строке подключения, добавьте ссылку на второй файл конфигурации, который вы развертываете в своей папке, например:

<connectionStrings configSource="connectionstrings.config" />

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

var map = new ExeConfigurationFileMap {ExeConfigFilename = @"C:\MyProject\custom.config"};
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
person Niels V    schedule 15.12.2012

Просто используйте SlowCheetah и примените преобразования конфигурации, см. http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx

person Niall Merrigan    schedule 15.12.2012