为什么有些Web.config将tokenized转换为SetParameters.xml而其他的不是?

Tro*_*unt 33 msbuild web-config visual-studio-2010 msdeploy

我最近在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>
Run Code Online (Sandbox Code Playgroud)

那么这是当前构建配置的相应配置转换:

<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>
Run Code Online (Sandbox Code Playgroud)

这些都是"替换"变换,而不是一个是在"名称"上匹配的连接字符串,另一个是与"密钥"匹配的应用程序设置,在我看来它们是相同的.

现在查看结果包中的SetParameters.xml文件,只有连接字符串具有setParameter节点.在PackagTmp文件夹的Web.config中,应用设置转换已应用,而连接字符串具有"$(ReplacableToken_AutoDeployDb-Web.config Connection String_0)"值,该值仅在部署包时应用.

为什么是这样?它是连接字符串特有的东西(或相反,应用程序设置)?我很欣赏这种方法基本原理,我不清楚为什么它适用于某些设置而不适用于其他设置.

任何人都可以对此有所了解吗?

Say*_*imi 37

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

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

  • 本文非常适合定义解决问题的方法:http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html (5认同)
  • 如果有一种简单的方法(通过MSBuild属性)以这种方式处理appSettings(特定的或整个集合),那将是非常有用的.例如,AutoParameterizationAppSettings = true. (3认同)