Чтобы обрабатывать параметры для разных целей развертывания, я переместил настройки приложения из app.config в собственный файл и включил этот файл в app.config через configSource. Я также создал файл настройки для каждого target.Here является иллюстрацией:Несколько файлов конфигурации .NET и проблема с проектом установки
Project A
app.config (references settings.config)
settings.config
settings.Release.config
settings.Debug.config
Во время пост-сборки, скопировать соответствующие параметры {Конфигурация} .config в выходной каталог.. Это работает до сих пор, и я могу видеть файл settings.config в каталоге вывода проекта, содержащий настройки для текущей конфигурации сборки: Release, Debug и т. Д.
Однако у меня возникла проблема с проектом установки, который я для этого проекта (проект А). Первоначально он не включал файл settings.config. Поэтому я установил действие build для файла settings.config как Content, и я добавил файлы контента из Project A в проект установки. Это обеспечило включение файла settings.config в настройку. Однако, поскольку проект установки, по-видимому, выбирает файл settings.config из каталога проекта вместо выходного каталога, файл settings.config, включенный в настройку, не является тем, чем он должен быть. Я хочу, чтобы один из выходного каталога был включен в программу установки, так как тот является правильным для текущей конфигурации сборки. Я пробовал следующее:
- Добавил файл settings.config в качестве файла для проекта установки. Однако, похоже, я могу указать только абсолютный путь. Поэтому, когда я добавляю его из выходного каталога конкретной конфигурации сборки (..bin \ debug \ settings.config), он не работает в другой конфигурации сборки, поскольку (..bin \ debug \ settings.config) существует в каталог указан. Я изучил использование относительных путей или динамических путей в проекте установки, где конфигурация сборки могла быть указана как часть пути, но я ничего не мог найти.
Я рассмотрел возможность использования события pre-build для фактического изменения файла settings.config в каталоге проекта, а затем скопировал его по выходному каталогу, установив его «Копировать в каталог вывода», чтобы копировать всегда или копировать, если он более новый. Это должно гарантировать, что соответствующий файл settings.config будет скопирован в выходной каталог так же, как решение на основе пост-сборки, а также должно убедиться, что содержимое файла settings.config обновлено до того, как проект установки включает его. Однако мне не нравится это решение, потому что я должен убедиться, что файл settings.config можно записать, прежде чем я смогу внести какие-либо изменения, так как он контролируется источником. Если он доступен только для чтения, тогда мне нужно перевернуть его для записи, внести изменения и затем снова установить его на чтение. Это добавляет дополнительную сложность.
Мне было интересно, есть ли у кого-то лучшее представление или знает трюк проекта установки, который позволяет мне включать файл settings.config, подходящий для текущей конфигурации сборки в программе установки.
Благодаря
Я понятия не имею, насколько это полезно для вас, но вы можете попробовать сценарий MSBuild, чтобы достичь своего конфигурационного файла «switch» перед компиляцией проекта. Я видел это так, как это было 2 года назад, но он был встроен в пару линий Hundread из Pearl для того, что было одним из самых сложных сценариев сборки, которые я когда-либо видел. Но вы должны сделать что-то гораздо более упрощенное для своего проекта. – 2009-05-27 17:03:25