在开发我的网络应用程序时,我需要在3种不同的环境中切换 - 开发,UAT和Prod。我的配置文件中有3个不同的数据库连接。我已经看到通过更改所有引用然后重新构建解决方案来手动完成这些设置,并且还完成了预处理器指令。是否有一种简单的方法可以根据某个变量执行此操作,以便在每次部署到新环境时不必修改配置?
答案 0 :(得分:11)
对我而言,您似乎可以从Visual Studio 2005 Web Deployment Project获益。
有了这个,您可以告诉它根据构建配置更新/修改web.config文件的各个部分。
请查看this blog entry from Scott Gu以获取快速概览/样本。
答案 1 :(得分:3)
我非常喜欢使用MSBuild,特别是MSBuild社区任务(http://msbuildtasks.tigris.org/),并且有一个XSLT任务可以使用适当的连接字符串设置等转换web.config。
我将这些任务放在手边:
<Target Name="Configs">
<Xslt RootTag="" Inputs="web.config" Output="Web.$(COMPUTERNAME).config" Xsl="web.config.$(COMPUTERNAME).xslt" Condition="Exists('web.config.$(COMPUTERNAME).xslt')" />
显然,这不是你所追求的100%,所以每个开发者都可以拥有自己的web.config。
但是没有理由你不能使用上面的原则来拥有适用于正确XSLT的多个构建配置。
我的XSLT看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<!-- Dev -->
<xsl:template match="/configuration/connectionStrings/add[@name='MyConnectionString']/@connectionString">
<xsl:attribute name="connectionString">Data Source=MyServer;Initial Catalog=MyBD;User ID=user;password=pwd</xsl:attribute>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
答案 2 :(得分:2)
Scott Hanselman提出了一种方法:
http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
答案 3 :(得分:2)
您始终可以使用NAnt + NAnt.Contrib在构建期间修改web.config。 NAnt具有xmlpeek和xmlpoke任务,允许您更新xml文件。
e.g。
&lt; xmlpoke file =“$ {dist.dir} /Web.config” xpath =“/ configuration / applicationSettings / MyProj.Web.Properties.Settings / setting [@name ='MyProj_Web_Service'] / value” value =“http:// $ {AppServer} /Service.asmx”/&gt;
答案 4 :(得分:1)
我采用了Jean Paul Boodhoo Method更改配置。 一般的想法是拥有一个或多个TOKENIZED配置TEMPLATE文件而不是配置文件本身。然后,您有一个构建脚本任务,该任务使用SINGLE本地属性文件中的值替换标记。此属性文件包含配置中的所有差异,并且每个工作副本都是唯一的。
这个系统对我来说很有用,一旦初步设置轻而易举地管理环境变化。