У меня есть приложение, которое я только что перехожу в Azure. В настоящее время я использую преобразование web.config для управления изменением среды подключения к базе данных dev / staging / prod. Как лучше всего управлять этими несколькими строками подключения в Azure?
Рекомендации по использованию строки подключения Azure
Ответы (5)
В случаях, когда не имеет значения, видит ли разработчик производственные учетные данные, вы можете использовать встроенные преобразования конфигурации Visual Studio 10. Если это то, что вы ищете, выполните следующие действия:
1. Перейдите в папку проекта Azure в проводнике файлов
2. Сделайте копию ServiceConfiguration.cscfg
3. Переименуйте копию в ServiceConfiguration.Base.cscfg
4. Для каждой конфигурации сборки (например, Dev, Staging , Production), создайте файл конфигурации ServiceConfiguration. ‹Имя конфигурации› .cscfg. В этих файлах вы можете использовать обычный синтаксис преобразования конфигурации
5. Откройте файл .ccproj в текстовом редакторе
6. Найдите следующий узел,
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.cscfg" />
</ItemGroup>
и замените его на это (вам нужно будет отредактировать этот блок, чтобы он соответствовал вашим конфигурациям сборки):
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.cscfg" />
<None Include="ServiceConfiguration.Base.cscfg">
<DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
</None>
<None Include="ServiceConfiguration.Dev.cscfg">
<DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
</None>
<None Include="ServiceConfiguration.Staging.cscfg">
<DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
</None>
<None Include="ServiceConfiguration.Production.cscfg">
<DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
</None>
</ItemGroup>
7. Добавьте следующее в конец файла .ccproj, чуть выше </Project>
:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
<Target Name="BeforeBuild">
<TransformXml Source="ServiceConfiguration.Base.cscfg" Transform="ServiceConfiguration.$(Configuration).cscfg" Destination="ServiceConfiguration.cscfg" />
</Target>
8. Если вы используете CI-сервер, на котором не установлена Visual Studio 10, вам, вероятно, придется скопировать папку C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web и ее содержимое из машина разработки к серверу.
Обновление: как отметил , @SolarSteve, вам может потребоваться добавить пространство имен в файлы ServiceConfiguration. *. cscfg. Вот пример ServiceConfiguration.Base.cscfg:
<sc:ServiceConfiguration serviceName="MyServiceName" osFamily="1" osVersion="*" xmlns:sc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<sc:Role name="MyRoleName">
<sc:Instances count="1" />
<sc:ConfigurationSettings>
<sc:Setting name="DataConnectionString" value="xxx" />
</sc:ConfigurationSettings>
</sc:Role>
</sc:ServiceConfiguration>
Лично мы:
- Полностью исключены преобразования веб-конфигурации.
- Настройка берется из cscfg.
- Версия для разработки cscfg указывает на локальную среду разработки (которая хранится в системе контроля версий).
- При развертывании в производственной среде мы предоставляем безопасные учетные данные для производственной среды SQL Azure и хранилища.
Образец класса управления настройками, который сканирует настройки приложения и облачную среду на предмет значений конфигурации, можно найти в Lokad.CQRS с открытым исходным кодом. для проекта Windows Azure (см. CloudSettingsProvider)
CloudConfigurationManager можно использовать в пакете SDK Azure 1.7 http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager
Это начинается с просмотра файла ServiceConfiguration.cscfg, например. ServiceConfiguration.Cloud.cscfg для настройки конфигурации. Если его там нет, он возвращается к web.config и app.config
Например
CloudConfigurationManager.GetSetting("StorageConnectionString")
Будет искать в соответствующем файле cscfgfile параметр StorageConnectionString, затем поиск выполняется в web.config, а затем в app.config.
У нас есть несколько сред (локальный разработчик внутри структуры разработки, локальный разработчик вне структуры разработки, тестирование, выпуск, который имеет 2 версии: выпуск / прод и выпуск / постановка и 20 проектов, некоторые из которых нуждаются в некоторой изменчивости в настройках конфигурации. Мы решили эту проблему Проблема заключается в создании крошечного проекта "config", включающего туда подпапки, соответствующие средам.Мы копируем файлы из подпапки в зависимости от того, какую сборку мы делаем, в корневую папку проекта конфигурации во время каждой компиляции.
Все остальные проекты связаны с проектом конфигурации для файлов .config. Мы также используем файлы частичной конфигурации, чтобы избежать безумия постоянного повторения одной и той же информации в различных средах.
Надеюсь это поможет
<Setting name="NewSettingProperty" value="123" />
, как вы дадите это SolutionA, не передавая его другим решениям ?
- person Jeff; 25.09.2012
У меня было такое же требование к преобразованию ServiceConfiguration.
Я получил ответ от jmac (спасибо!), Но у меня возникли проблемы с пространством имен в базовой версии:
<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
после того, как еще немного покопался, нашел это Эндрю Паттерсон (Спасибо).
так что мой результирующий файл преобразования:
<asc:ServiceConfiguration serviceName="TestCloud2" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:asc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
<asc:Role name="WebRole1">
<asc:Instances count="1" />
<asc:ConfigurationSettings>
<asc:Setting name="LoggingStorage" value="UseDevelopmentStorage=true" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</asc:ConfigurationSettings>
</asc:Role>