您的答案是使用web.config变换和您的SetParameters.xml文件的组合。我知道他们起初看起来很艰巨,但如果你把时间投入到学习中,它就会得到回报。
使用web.config转换或根据计算机名称命名连接字符串是坏主意TM。这些解决方案将工作,但他们需要您每次释放到新环境时重新构建WebDeploy程序包。您需要一个解决方案,让您可以将任何软件包部署到任何环境。
首先,您需要创建两个web.config变换。一个用于调试,一个用于发布。 Web.Debug.config将如下所示:
<connectionStrings>
<add name="MyDB" connectionString="Data Source=.\SQLExpress;Initial Catalog=MyDevDatabase;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
而您的Web.Release.config将包含一个占位符字符串。当您将程序包部署到目标环境中的IIS时,这些占位符将被更新。它应该是这样的:
<connectionStrings>
<add name="MyDB" connectionString="__targetenvironmentconnstring__"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
为了让您的目标环境连接字符串中的地方,当你做你的部署,你需要在属性在Web项目更新您发布配置。您将为每个目标环境创建一个发布配置文件(使用包选项);所以QA.pubxml,UAT.pubxml,Production.pubxml等Visual Studio将引导您通过向导来创建这些文件,当您使用发布对话框。现在打开每个文件。你要编辑的文件的末尾纳入MSDeployParameterValue
元素,如我在这里所做的
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <!-- A bunch of info --> </PropertyGroup>
<ItemGroup>
<MSDeployParameterValue Include="$(DeployParameterPrefix)MyDB-Web.config Connection String">
<ParameterValue><!-- Your target environment connection string goes here! --></ParameterValue>
</MSDeployParameterValue>
</Project>
现在,右键单击并发布你的Web项目,选择发布配置你想要的。在您指定的输出目录中,您将看到一个包含您的目标连接字符串的SetParameters.xml文件。这将会进入你的网络。配置文件在部署,但重要的是,你也可以只手动导入包使用IIS,并在部署时这样分配自己的价值观:
最后你可以参考你的连接字符串使用ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString
无论您处于什么环境,您都拥有正确的价值!
要了解更多,我强烈建议您阅读以下
这需要几个去绕到你的头,但你永远不会回去。
谢谢,Dillie-O。说实话,我对于网络转换并没有一个清晰的认识,这就是为什么我在寻找更简单的东西。 – physics90
我真的建议不要自己使用web.config变换 - 他们强迫你在每次部署到新的目标环境时重新构建你的包,当你将自动发布过程引入混合时,开始变得非常麻烦。 – s3raph86
@ physics90 - 如果它有助于在所有的web.config的混乱变换,这里是一个老博客文章中,我如何得到它运行起来,这是一个容易得多比它听起来写道 - HTTPS://dillieodigital.wordpress .COM/2010/9月27日/驯服,你-configurationdeployments与 - 网络配置 - 变换/ s3raph86使得有关部署的顾虑好点,但我在我自己的CI环境中被发现捻/天青/ VS可以轻松地在编译部署时定位正确的配置。您可能需要重新审视,但如果您主要关注自己的开发工作,则转换应该没问题。 –