visual-studio-2010 - 为什么有些Web.config转换将标记化为SetParameters.xml,而另一些却没有?

标签 visual-studio-2010 msbuild web-config msdeploy

我最近在VS2010中一直使用config转换,但是对于为什么某些转换直接应用于包中的Web.config却为何将其他转换针对SetTokens.xml中的 token 存储然后在发布时应用的原因感到困惑。

例如,使用具有以下连接字符串和应用程序设置的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连接字符串_0)”值时,已经应用了应用程序设置转换,该值仅在部署程序包时才应用。

为什么是这样?它是特定于连接字符串(或相反,特定于应用程序设置)的吗?我感谢rationale of this approach,我不清楚为什么将它应用于某些设置,而不应用于其他设置。

谁能对此有所启发?

最佳答案

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

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

关于visual-studio-2010 - 为什么有些Web.config转换将标记化为SetParameters.xml,而另一些却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151325/

相关文章:

c# - Silverlight 应用程序的 WCF 服务返回 "NotFound"

c++ - Visual Studio 2010 C++ 中 win32form 上的控制台应用程序输出

visual-studio-2010 - 从 native C++ 迁移到 C++/CLI : new keywords conflict with old names

c# - 有没有办法让 msbuild 将错误输出输出到 stderr?

c# - 排除在调试中构建的文件

asp.net-mvc - 应用程序不记录

asp.net - 在 Web.config 帮助中定义 tagPrefixes

c++ - 如何在 C++ 中使用 WORD、UCHAR、ULONG、USHORT 类型?

c++ - VS2010 LoadFrame 在 Release模式下失败并出现错误 1401

c++ - 更改 .cpp 文件导致 Visual Studio 2012 重新编译不相关的文件