当使用Nant发布构建类型时,是否可以自动更改web.config中的连接字符串?如果是这样,怎么样?感谢
答案 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属性的值将根据构建类型而有所不同。
中有所描述答案 3 :(得分:1)
我用一种简单的方法。我准备了许多版本的配置文件,每个版本都包含自己的连接字符串(DEV,TEST,PRODUCTION)。在NANT脚本中,当我创作不同的目标时,我会复制特定的配置文件以覆盖默认目标。