J'ai une application que je suis en train de migrer vers Azure. Actuellement, j'utilise la transformation web.config pour gérer la modification de la base de données reliant les environnements dev / staging / prod. Comment gérer au mieux ces multiples chaînes de connexion dans Azure?
Réponses
Trop de publicités?Dans les cas où il n'a pas d'importance si le développeur peut voir la production d'informations d'identification, vous pouvez utiliser Visual Studio 10 config transformations. Si c'est ce que vous cherchez, procédez comme suit:
1.Accédez à votre Azure dossier du projet dans l'explorateur de fichiers
2. Faire une copie de ServiceConfiguration.cscfg
3. Renommez la copie de ServiceConfiguration.De la Base.cscfg
4. Pour chaque configuration de build (par exemple, Dev, la mise en scène, Production), de créer un ServiceConfiguration.<construire nom de config>.cscfg fichier. Dans ces fichiers, vous pouvez utiliser le normal config transformation de la syntaxe
5. Ouvrez votre .ccproj fichier dans un éditeur de texte
6. Trouver le nœud suivant,
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.cscfg" />
</ItemGroup>
et de le remplacer par ceci (vous devrez modifier ce bloc pour correspondre à votre construire configs):
<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.Ajouter le texte suivant à la fin de l' .ccproj fichier, juste au-dessus de </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.Si vous utilisez un serveur CI, qui n'a pas de Visual Studio 10 est installé, vous aurez probablement à copier le C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\dossier Web et son contenu à partir d'une machine de développement pour le serveur.
Mise à jour: @SolarSteve noté, vous pourriez avoir à ajouter un espace de noms à votre ServiceConfiguration.*.cscfg fichiers. Voici un exemple de ServiceConfiguration.De la 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>
Personnellement, nous avons:
- Chuté de configuration web de transformations complètement.
- Le réglage est extrait de cscfg.
- La version de développement de cscfg points à l'environnement local de développement (qui est stocké dans le contrôle de version).
- Alors que le déploiement de la production, nous fournissons des informations d'identification sécurisée pour la production de SQL Azure et de stockage.
Pour l'échantillon des paramètres de gestion de classe qui analyse les paramètres de l'application et de l'environnement d'informatique en nuage pour les valeurs de configuration, vous pouvez vérifier open source de Lokad.CQRS pour Windows Azure projet (voir CloudSettingsProvider)
Vous pouvez utiliser CloudConfigurationManager dans Azure SDK 1.7 http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager
Cela commence par la recherche dans le ServiceConfiguration.cscfg par exemple ServiceConfiguration.Le Cloud.cscfg pour le paramètre de configuration. Si elle n'est pas là, il tombe en arrière sur le web.de configuration et d'application.config
Par exemple
CloudConfigurationManager.GetSetting("StorageConnectionString")
Va regarder dans la cscfgfile pour StorageConnectionString réglage, puis il va chercher sur le web.config et puis app.config.
Nous avons un certain nombre d'environnements (dev local à l'intérieur de tissu de dev, local dev en dehors de tissu de dev, test, qui a 2 versions: version/prod et publication/mise en scène et de 20 projets de certains qui ont besoin d'une certaine variabilité dans configurer les paramètres. Nous avons résolu ce problème en créant une petite "config" du projet, inclus les sous-dossiers, il y qui correspondent à l'environnement. Nous copier les fichiers du sous-dossier selon la construire, nous sommes en train de faire le dossier racine de la configuration du projet, au cours de chaque compilation.
Tous les autres projets en lien pour la config du projet .les fichiers de configuration. Nous avons également l'utilisation partielle des fichiers de configuration pour garder la folie de répéter la même info tout le temps à travers les différents environnements.
Espérons que cette aide
J'ai eu la même exigence pour la transformation de l'ServiceConfiguration.
Je suis allé avec la réponse de jmac (merci!), mais avait du mal avec l'espace de noms dans la version de Base:
<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
après un peu plus de fouiller trouvé ce par Andrew Patterson (Merci).
donc, mon résultant fichier de transformation:
<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>