我一直在最近使用VS2010中的配置轉換,但很困惑,爲什麼有些轉換直接應用於包中的Web.config,但其他轉換則存儲在SetParameters.xml中的令牌中,然後應用於發佈。爲什麼某些Web.config轉換標記爲SetParameters.xml而其他標記不是?
例如,拿一個Web.config與下面的連接字符串和應用程式設定:
<connectionStrings>
<add name="AutoDeployDb" connectionString="Data Source=(local);Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=Passw0rd"/>
</connectionStrings>
<appSettings>
<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>
然後這裏的相應配置變換當前構建配置:
<connectionStrings>
<add xdt:Transform="Replace" xdt:Locator="Match(name)" name="AutoDeployDb" connectionString="Data Source=MyDevServer;Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=s*#@Kdsl" />
</connectionStrings>
<appSettings>
<add xdt:Transform="Replace" xdt:Locator="Match(key)" key="ChartImageHandler" value="storage=file;timeout=20;dir=d:\inetpub\AutoDeploy\TempImageFiles\"/>
</appSettings>
這些都是「替換」變換,而不是一個是「name」匹配的連接字符串,另一個是與「key」匹配的應用程序設置,在我看來,它們是相同的。
現在查看生成包中的SetParameters.xml文件,只有連接字符串具有setParameter節點。在PackagTmp文件夾的Web.config中,應用程序設置轉換已經應用,而連接字符串具有僅在部署包時應用的「$(ReplacableToken_AutoDeployDb-Web.config連接String_0)」值。
這是爲什麼?它是特定於連接字符串(或相反,應用程序設置)的東西嗎?我很欣賞rationale of this approach,我只是不清楚它爲什麼適用於某些設置而不適用於其他設置。
任何人都可以對此有所瞭解嗎?
如果有一種簡單的方法(通過MSBuild屬性)以這種方式處理appSettings(無論是特定的還是整個集合),這將是非常有用的。例如AutoParameterizationAppSettings = true。 – 2011-05-25 23:23:05
這篇文章很好的定義瞭解決我的問題的方法:http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html – 2011-05-25 23:37:38
但是爲什麼有人想要這樣? – 2012-03-26 14:00:02