在ASP.NET中,切换开发、UAT和生产环境的最佳配置方式是什么?

10

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

5个回答

11

这个方案提供了最少的摩擦和时间,我能够相当快地将其启动并运行起来。感谢您的帮助! - Mark Struzinski

3
我非常喜欢使用MSBuild,特别是MSBuild Community Tasks(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>


我一直在研究MSBuild和/或NAnt作为我接下来要学习的东西,但还没有开始。我知道我需要开始了!! - Mark Struzinski
我的答案链接到一系列博客文章,教你如何使用 NAnt 自动化构建。你可能会发现这是一个有用的起点。 - Gilligan
我对NAnt没有任何经验,它相比MSBuild提供了哪些优势? - Aaron Powell
差异微小。Nant有更多的任务并且稍微更成熟,但是MsBuild随Visual Studio一起发布,并且实际上被Visual Studio在内部使用,因此它可能具有更低的入门成本。 - Gilligan
嗯,也许需要研究一下。我对MSBuild很熟悉(自己写了一些任务,你可以从我的博客上获取)。 - Aaron Powell
Jean Paul Boodhoo博客系列展示的许多任务在MSBuild中也存在。如果您想使用他的版本控制数据库更改的想法,请搜索DbDeploy。这是一个免费的工具,用于合并数据库更改脚本。 - Gilligan

2

您可以使用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" />


2

我在那个页面上得到了404错误。你能否简要概括一下? - Mark Struzinski
奇怪 - 可能是Scott在进行引荐者检查? - Whisk
1
或许您已经发布了一个以问号结尾的URL?尝试去掉末尾的问号,链接就可以正常工作了。 - Magnus Johansson

1

我采用了Jean Paul Boodhoo Method来改变配置。 总的想法是使用一个或多个TOKENIZED配置TEMPLATE文件,而不是配置文件本身。然后,您可以有一个构建脚本任务,将令牌替换为来自单个本地属性文件的值。此属性文件包含所有配置差异,并且每个工作副本都是唯一的。

这个系统对我来说非常有效,一旦最初设置完成后,管理环境变化就轻而易举。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接