10

在开发我的 Web 应用程序时,我需要在 3 个不同的环境之间切换 - 开发、UAT 和 Prod。我的所有 3 个配置文件中都有不同的数据库连接。我已经看到通过更改所有引用然后重新构建解决方案来手动切换这些设置,并且还使用预处理器指令完成。是否有一种基于某些变量的简单方法来执行此操作,以便每次部署到新环境时都不必修改配置?

4

5 回答 5

11

在我看来,您似乎可以从Visual Studio 2005 Web 部署项目中受益。

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

请查看Scott Gu 的这篇博客文章,以获得快速概述/示例。

于 2008-09-25T12:08:27.597 回答
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>

于 2008-09-25T12:14:22.137 回答
2

Scott Hanselman 提出了一种方法来做到这一点:

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

于 2008-09-25T12:06:12.280 回答
2

在构建过程中,您始终可以使用 NAnt + NAnt.Contrib 修改 web.config。NAnt 具有允许您更新 xml 文件的 xmlpeek 和 xmlpoke 任务。

例如

<xmlpoke 文件="${dist.dir}/Web.config" xpath="/configuration/applicationSettings/MyProj.Web.Properties.Settings/setting[@name = 'MyProj_Web_Service']/value" value="http:// /${AppServer}/Service.asmx" />

于 2009-01-10T23:28:37.717 回答
1

我采用了Jean Paul Boodhoo更改配置的方法。总体思路是拥有一个或多个 TOKENIZED 配置模板文件,而不是配置文件本身。然后,您有一个构建脚本任务,该任务将标记替换为单个本地属性文件中的值。此属性文件包含配置中的所有差异,并且每个工作副本都是唯一的。

这个系统对我来说效果很好,一旦开始设置就可以轻松管理环境变化。

于 2008-09-25T12:09:14.520 回答