J'ai eu un problème similaire. Voilà ce que je l'ai fait:
Mon app.config ressemble à ceci:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="ConenctToInputDB" value="InputDev" />
<add key="ConnectToOutputDB" value ="OutputDev"/>
<add key="ClientSettingsProvider.ServiceUri" value="" />
</appSettings>
<connectionStrings>
<add name="LocalConnection" connectionString="YOUR CONNECTION STRING HERE" />
<add name="InputDev" connectionString="YOUR CONNECTION STRING HERE" />
<add name="InputCert" connectionString="YOUR CONNECTION STRING HERE"/>
<add name="OutputDev" connectionString="YOUR CONNECTION STRING HERE/>
<add name="OutputCert" connectionString="YOUR CONNECTION STRING HERE" />
<add name="InputProd" connectionString="YOUR CONNECTION STRING HERE/>
<add name="OutputProd" connectionString="YOUR CONNECTION STRING HERE" />
</connectionStrings>
Dans ce secenario, je 2 dbs me connecter à et j'ai 3 chaînes de connexion différentes pour chaque (développement, certification et Production)
Ajoutez ceci au bas de votre fichier de projet (faites un clic droit sur le projet et déchargez-le). Assurez-vous de l'ajouter avant le tag </project>
. (Vous devrez installer les tâches communautaires MSBuild pour que cela fonctionne Ils peuvent être téléchargés gratuitement à partir de:. http://msbuildtasks.tigris.org/ (Assurez-vous d'obtenir une nightly build))
<PropertyGroup>
<!--Import the MSBuild community tasks so we can update xml-->
<MSBuildCommunityTasksPath>C:\PathToMSBuildCommunityTasks\MSBuildTasks</MSBuildCommunityTasksPath>
<SubstitutionsFile Condition="'$(Configuration)' == 'Debug'">DevAppSettings.xml</SubstitutionsFile>
<SubstitutionsFile Condition="'$(Configuration)' == 'Cert'">CertAppSettings.xml</SubstitutionsFile>
<SubstitutionsFile Condition="'$(Configuration)' == 'Prod'">ProdAppSettings.xml</SubstitutionsFile>
</PropertyGroup>
<Import Project="C:\PathToMSBuildCommunityTasks\lib\MSBuildTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="AfterBuild">
<!--Update the app config to have the correct environment paths-->
<Message Text="Updating $(MSBuildProjectName) config to $(Configuration)" Importance="high"></Message>
<XmlMassUpdate ContentFile="$(OutDir)\$(MSBuildProjectName).dll.config" SubstitutionsFile="..\..\$(SubstitutionsFile)" />
</Target>
Cela remplacera la section <appSettings>
de l'application Fichier .config basé sur la configuration actuelle. Vous devrez faire de nouvelles configurations (je les ai appelées Cert et Prod).
La dernière étape consiste à créer un fichier pour chaque configuration (je les ai appelés DevAppConfig.xml, CertAppConfig.xml, ProdAppConfig.xml)
Dans chaque fichier devrait ressembler à ceci (celui-ci est pour la configuration de certification):
<?xml version="1.0" encoding="utf-8"?>
<!--This file is used by the build files to merge in solution wide app settings
Some projects contain files that have an AppSetting section (usually in App.config). Those projects have
and AfterBuild event in the project file that substitues this xml tree over the the normal xml tree.-->
<configuration xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate">
<appSettings>
<add xmu:key="key" key="ConenctToInputDB" value="Cert"/>
<add xmu:key="key" key="ConnectToOutputDB" value="ESPCert"/>
</appSettings>
</configuration>
tout cela, une fois installé fera le fichier qui est sortie par app.config soit automatiquement modifiée en fonction de la configuration que vous compilez. Ce code fonctionne à la fois pour la compilation dans l'EDI et dans Team Build.
Oui, c'est une solution possible. Ce que nous avons fait est de préparer un fichier .localrunconfig pour chaque base de données, puis dans le fichier tfsbuild d'exécuter toutes les configurations les unes après les autres. Merci pour la solution proposée! – user47678
Et dans la classe de test de base, nous prenons simplement le fichier de configuration, et l'utilisons pour instancier la bonne base de données. – user47678