如何使用Nant在构建时自动更改连接字符串

时间:2009-12-11 05:24:35

标签: .net nant

当使用Nant发布构建类型时,是否可以自动更改web.config中的连接字符串?如果是这样,怎么样?感谢

4 个答案:

答案 0 :(得分:18)

我认为你可以使用xmlpoke任务。例如,如果您的web.config是

<?xml version="1.0"?>
<configuration>
    <connectionStrings>
        <add name="myDb" connectionString="blah" providerName="blah"/>
    </connectionStrings>
</configuration>

然后你可以像这样在你的构建文件中添加一个任务。

<xmlpoke 
    file="path_to_your_web_root\Web.config"
    xpath="/configuration/connectionStrings/add[@name='myDb']/@connectionString"
    value="your_connection_string" />

哦,这是xmlpoke任务的文档。 http://nant.sourceforge.net/release/latest/help/tasks/xmlpoke.html

答案 1 :(得分:5)

我认为您希望这样做是为了让连接字符串在Nant构建发布代码时指出生产环境而不是开发或测试环境。我通常有不同的方法来解决这个问题;将连接字符串保存在单独的文件中。您可以使用configSource属性执行此操作:

<!-- point out a file containing the connectionStrings config section -->
<connectionStrings configSource="connections.config"></connectionStrings>

connections.config文件应该如下所示:

<?xml version="1.0"?>
<connectionStrings>
    <add name="myDb" connectionString="{your connection string}"/>
</connectionStrings>

由于连接字符串在生产环境中很少发生变化,因此通常可以从部署中排除文件connections.config

答案 2 :(得分:2)

另一种方法是使用一个模板,其中您有一个代币来代替连接字符串,例如

<connectionString>
   <add name="myDb" connectionString="@CONNECTION_STRING@" />
</connectionStrings>

然后使用过滤链将其替换为相应的字符串。

<copy file="Web.config.template" tofile="Web.config" overwrite="true">
    <filterchain>
        <replacetokens>
            <token key="CONNECTION_STRING" value="${ConnectionString}" />
        </replacetokens>
    </filterchain>
</copy>

ConnectionString属性的值将根据构建类型而有所不同。

过滤链在Nant Documentation

中有所描述

答案 3 :(得分:1)

我用一种简单的方法。我准备了许多版本的配置文件,每个版本都包含自己的连接字符串(DEV,TEST,PRODUCTION)。在NANT脚本中,当我创作不同的目标时,我会复制特定的配置文件以覆盖默认目标。