为什么某些 Web.config 转换标记化为 SetParameters.xml,而其他则不然?

2024-05-09

我最近在 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)”值,该值仅在部署包时应用。

为什么是这样?它是否特定于连接字符串(或者相反,特定于应用程序设置)?我很欣赏这种方法的基本原理 http://msdn.microsoft.com/en-us/library/ff398068.aspx,我只是不清楚为什么它适用于某些设置而不适用于其他设置。

有人能解释一下吗?


这实际上与配置转换无关。我刚刚发布了一篇非常详细的博客http://sedodream.com/2010/11/11/ASPNETWebApplicationPublishPackageTokenizingParameters.aspx http://sedodream.com/2010/11/11/ASPNETWebApplicationPublishPackageTokenizingParameters.aspx。但这里有一些信息供您参考。

在 Web 发布管道 (WPP) 中,我们将连接字符串作为特殊工件进行处理。我们将自动为您创建所有连接字符串的参数。这是因为在许多情况下,当您部署应用程序时,您想要更改连接字符串。我们不会自动为任何 appSettting 值创建参数。现在回到您的问题,为什么我们要标记连接字符串?我们这样做实际上是为了确保您不会错过设置该值,然后意外地让您的应用程序更新错误的数据库。我们通过为您创建这些参数来帮助您。如果需要,您也可以禁用此行为。您可以设置 MSBuild 属性自动参数化WebConfigConnectionStrings为假。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么某些 Web.config 转换标记化为 SetParameters.xml,而其他则不然? 的相关文章

随机推荐