最近我一直在使用VS2010中的配置转换,但是有些困惑,不明白为什么有些转换会直接应用于包中的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>
这两种转换都是"Replace"类型,除了一个连接字符串匹配"name",另一个应用程序设置匹配"key",在我看来它们是相同的。现在在生成的软件包中查看SetParameters.xml文件,只有连接字符串有一个setParameter节点。在PackagTmp文件夹的Web.config中,应用程序设置已经被应用,而连接字符串有一个"$(ReplacableToken_AutoDeployDb-Web.config Connection String_0)"值,仅在软件包部署时应用。为什么会这样?这是特定于连接字符串(或相反,特定于应用程序设置)的问题吗?我理解这种方法的基本原理,只是不清楚为什么它适用于某些设置而不适用于其他设置。能否有人解释一下这个问题?