2008-09-25 19 views
10

當我開發我的web應用程序 - 開發,UAT和Prod時,我需要在3種不同的環境中切換。我在所有配置文件中都有不同的數據庫連接3.我已經看到,通過更改所有引用,然後重新構建解決方案,並使用預處理器指令完成手動切換這些設置。有沒有簡單的方法可以根據某個變量來做到這一點,以便每次部署到新環境時都不必修改配置?在ASP.NET中的開發/ UAT/Prod環境之間切換配置的最佳方式?

回答

1

我已採用更改配置的Jean Paul Boodhoo Method。 一般的想法是有一個或多個TOKENIZED配置文件,而不是配置文件本身。然後,您有一個構建腳本任務,它使用SINGLE本地屬性文件中的值替換這些標記。此屬性文件包含配置中的所有差異,並且每個工作副本都是唯一的。

這個系統對我來說很好,一旦初始化設置對管理環境變化來說是輕而易舉的。

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.c onfig。

但是沒有理由不能使用上述原則來使用適用於正確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

您可以隨時使用楠+ NAnt.Contrib在生成過程中修改Web.config。 NAnt有xmlpeek和xmlpoke任務,允許您更新xml文件。

例如

< xmlpoke file =「$ {dist.dir} /Web.config」 xpath =「/ configuration/applicationSettings/MyProj.Web.Properties。設置/設置[@name ='MyProj_Web_Service'] /值「 value =」http:// $ {AppServer} /Service.asmx「/ >

相關問題