2009-12-11 45 views

回答

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

+0

當connectionString包含空格時,它似乎不工作:( – sinsedrix 2013-10-23 07:47:37

5

我假設你想這樣做是爲了讓連接字符串指出一個生產環境而不是開發或測試環境,當南特建立釋放代碼。我通常有不同的方法來解決這種情況。將連接字符串保存在單獨的文件中。您可以通過使用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可以再一般從部署中排除。

+0

描述是否有類似的方式來設置數據庫/數據源/的connectionString在sqlmap.config? – sinsedrix 2013-10-23 08:20:03

1

我用一個簡單的方法。我準備了許多版本的配置文件,每個版本都包含自己的連接字符串(DEV,TEST,PRODUCTION)。在NANT腳本中,當我編寫不同的目標時,我複製特定的配置文件以覆蓋默認的目標。

2

另一種替代方法是在代替連接字符串的情況下使用標記的模板,例如,

<connectionString> 
    <add name="myDb" connectionString="@[email protected]" /> 
</connectionStrings> 

然後用filterchains用適當的字符串替換它。

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

ConnectionString屬性的值將因構建類型而異。

Filterchains在Nant Documentation

+0

非常簡單的擴展解決方案。 – 2014-01-13 17:39:22