У меня была аналогичная проблема. Вот что я сделал:
Мой app.config выглядит так:
<?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>
В этом сценарии у меня есть 2 базы данных, к которым я подключаюсь, и у меня есть 3 разные строки подключения для каждой (разработка, сертификация и производство).
Добавьте это в конец файла проекта (щелкните правой кнопкой мыши проект и выгрузите его). Убедитесь, что вы добавили его перед тегом </project>
. (Для этого вам потребуется установить задачи сообщества MSBuild. Их можно бесплатно загрузить по адресу: http://msbuildtasks.tigris.org/ (убедитесь, что вы получаете ночную сборку))
<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>
Это заменит раздел <appSettings>
файла app.config на основе текущей конфигурации. Вам нужно будет сделать новые новые конфигурации (я назвал их Cert и Prod).
Последний шаг — сделать файл для каждой конфигурации (я назвал их DevAppConfig.xml, CertAppConfig.xml, ProdAppConfig.xml)
В каждом файле должно выглядеть так (это для конфигурации сертификации):
<?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>
все это после установки приведет к автоматическому изменению файла, выводимого app.config, в зависимости от конфигурации, которую вы компилируете. Этот код работает как для компиляции в IDE, так и для Team Build.
person
Vaccano
schedule
28.05.2009