代码之家  ›  专栏  ›  技术社区  ›  Mark Struzinski

在ASP.NET中在开发/UAT/PROD环境之间切换配置的最佳方法是什么?

  •  10
  • Mark Struzinski  · 技术社区  · 16 年前

    在开发我的Web应用程序时,我需要在3个不同的环境之间切换—开发、UAT和产品。我在所有3个配置文件中都有不同的数据库连接。我看到了通过更改所有引用,然后重新构建解决方案以及预处理器指令手动切换这些设置。是否有一种基于某个变量的简单方法来实现这一点,以便在每次部署到新环境时不必修改配置?

    5 回复  |  直到 14 年前
        1
  •  11
  •   Magnus Johansson    16 年前

    在我看来,你可以从 Visual Studio 2005 Web Deployment Project S.

    这样,您就可以告诉它根据构建配置更新/修改web.config文件的部分。

    看一看 this blog entry from Scott Gu 快速概述/示例。

        2
  •  3
  •   Aaron Powell    16 年前

    我非常喜欢使用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>
    

        3
  •  2
  •   JohannesH    15 年前

    在构建期间,可以始终使用nant+nant.contrib修改web.config。 nant有xmlpeek和xmlpoke任务,允许您更新XML文件。

    例如

    <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;

        5
  •  1
  •   Gilligan    16 年前

    我已经领养了 Jean Paul Boodhoo Method 改变配置。 一般的想法是拥有一个或多个标记化的配置模板文件,而不是配置文件本身。然后有一个构建脚本任务,用单个本地属性文件中的值替换标记。此属性文件包含所有配置差异,并且每个工作副本都是唯一的。

    这个系统对我来说工作得很好,一旦开始设置,管理环境变化就轻而易举了。