- PVSM.RU - https://www.pvsm.ru -
Я думаю, что каждый .net разработчик хоть раз, да сталкивался с проблемами управления конфигами для различных окружений. Часто есть необходимость при разработке новой функциональной возможности поменять строку подключения к БД, не мешая при этом другим разработчикам. Для этого обычно в конфиге меняется строка подключения на локальную базу данных, а потом эти изменения комитятся… Все остальные разработчики негодуют, потому что система перестала работать на их локальных машинах.
Если команда распределённая часто есть необходимость в спецефических настройках. Иногда вам нужны одинаковые настройки для разных проектов в солюшене и вы просто копируете их. В конце концов хотелось бы иметь возможность добавлять различную логику в конфиг. К примеру, на локальных машинах разработчиков отправленная почта должна сохранятся на диске, в то время как на тестовом сервере почта должна отправлятся с использованием сервиса отправки почты. Я думаю можно привести много примеров, которые сложно реализуемы без дополнительного механизма управления конфигами.
Описанные в предисловии недостатки привели к созданию маленького OSS проекта с названием Setty. Setty генерирует *.config файлы с использованием различных 'языков трансформации". Первая версия проекта использовала xslt для генерации конфигов, и многие новые разработчики, которые приходили в нашу компанию, с опасением смотрели на этот проект, несмотря на многие его преимущества. Поэтому немногим позже мы добавили ещё один, хорошо известный в мире .net 'язык трансформации' — razor, и возможность расширять проект любым 'языком трансформации' без особых проблем.
Самый простой способ установки — через плагин [1] для visual studio 2010. Но мы пойдём более тернистым путём и сделаем всё своими руками (razor + .net 4).
<configuration>
<appSettings>
<add key="MyFirstSetting" value="@Model["hello"]" />
...
Model["hello"]
— это пример того, как читить настройки с помощью razor.
<configuration>
<appSettings>
<add key="hello" value="Hello World"/>
</appSettings>
</configuration>
<Target Name="Setty" BeforeTargets="PreBuildEvent">
<Exec Command=""$(MSBuildProjectDirectory)..setty.exe" /silent" />
</Target>
Это нужно для того, чтобы перед каждым билдом setty перегенерировал конфигурационные файлы.
<configuration>
<appSettings>
<add key="MyFirstSetting" value="Hello World" />
...
В реальны проектах папка с настройками может выглядеть вот так:
Я полагаю, что иерархическая система чтения настроек понятна каждому .net разработчику.
Так как при использовании Setty ваши *.config файлы генерируются перед каждым билдом, то изменения добавленые в конфиг с помощью NuGet могут быть потеряны. Т.е. разработчики должны сами копировать эти изменения в *.config.cshtml файлы.
В *.config.cshtml теряется привычная подсветка для *.config файлов в .net.
1. Сайт проекта с более подробной документацией — setty.org [3]
2. Код проекта и место для обсуждений на github — Setty source code [4]
3. Плагин для visual studio 2010 — VS 2010 plugin [5]
P.S. Данный проект используется у нас в компании на протяжении нескольких лет и довольно успешно.
Автор: AndrewOrsich
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/11886
Ссылки в тексте:
[1] плагин: https://github.com/downloads/paralect/setty/Setty.VsAddin.vsix
[2] отсюда : https://github.com/downloads/paralect/setty/Setty.exe
[3] setty.org: http://setty.org/
[4] Setty source code: https://github.com/paralect/setty
[5] VS 2010 plugin: http://visualstudiogallery.msdn.microsoft.com/7df151ca-5c29-49af-aa67-bbc04e0311a9
Нажмите здесь для печати.