我最近一直在 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>
这些都是“替换”转换,除了一个是与“名称”匹配的连接字符串,另一个是与“键”匹配的应用程序设置,在我看来它们是相同的。
现在查看结果包中的 SetParameters.xml 文件,只有连接字符串有一个 setParameter 节点。在 PackagTmp 文件夹的 Web.config 中,应用设置转换已应用,而连接字符串具有“$(ReplacableToken_AutoDeployDb-Web.config Connection String_0)”值,该值仅在部署包时应用。
为什么是这样?它是否特定于连接字符串(或相反,特定于应用程序设置)?我很欣赏这种方法的基本原理,我只是不清楚为什么它适用于某些设置而不是其他设置。
任何人都可以对此有所了解吗?