代码之家  ›  专栏  ›  技术社区  ›  Troy Hunt

为什么有些web.config转换被标记为setparameters.xml,而其他的没有?

  •  33
  • Troy Hunt  · 技术社区  · 15 年前

    我最近在VS2010中使用了config转换,但对于为什么有些转换直接应用于包中的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节点。在packagetmp文件夹的web.config中,应用程序设置转换已经应用,而连接字符串具有“$(replaceblettoken_autodeploydb-web.config connection string_0)”值,该值仅在部署包时应用。

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

    有人能解释一下吗?

    2 回复  |  直到 12 年前
        1
  •  37
  •   Sayed Ibrahim Hashimi    15 年前

    这实际上与配置转换无关。我刚刚在 http://sedodream.com/2010/11/11/ASPNETWebApplicationPublishPackageTokenizingParameters.aspx

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

        2
  •  1
  •   David Hu    12 年前

    在部署方面,它们之间有一个显著的区别。将Web包导入到IIS时:

    • 连接字符串将自动包含在向导对话框中,以便进一步参数化。
    • 默认情况下,应用程序设置不存在。 如果您真的想这样做,请遵循以下步骤 在“自定义参数化-web.config文件中的应用程序设置”部分 Configuring Parameters for Web Package Deployment

    差异化在开发和运营之间创建了一个责任边界。一方面,您将目标环境的参数(数据库、缓存、AWS密钥/秘密等)放在OPS需要处理的连接字符串中。另一方面,在应用程序设置部分放置了不相关的选项,这样可以减轻操作人员对特定产品和业务逻辑的负担。

    在我的公司,一个操作人员经常负责多个产品。你真的不能要求他们像你一样了解产品知识。他们需要注意的事情越少,生活就越幸福。